Skip to content

Added - workflow

Added - workflow #1

Workflow file for this run

name: Build and release
env:
CI: false
BUILD_VERSION: "v${{ vars.VERSION }}.${{ vars.MAJOR }}.${{ vars.MINOR }}.${{ github.run_number }}"
on:
push:
branches:
- main
jobs:
build-and-release:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Determine Docker image tag
id: docker_tag
run: |
IMAGE_TAG="${{vars.MICROPYTHON_VERSION}}"
IMAGE_NAME="rav3nh01m/micropython_esp-idf:$IMAGE_TAG"
echo "Checking for image: $IMAGE_NAME"
if docker pull "$IMAGE_NAME"; then
echo "Using tag: $IMAGE_TAG"
else
echo "Tag not found. Falling back to latest."
IMAGE_TAG="latest"
docker pull "rav3nh01m/micropython_esp-idf:latest"
fi
echo "image_tag=$IMAGE_TAG" >> $GITHUB_OUTPUT
- name: Get runner UID and GID
id: runner_ids
run: |
echo "uid=$(id -u)" >> "$GITHUB_OUTPUT"
echo "gid=$(id -g)" >> "$GITHUB_OUTPUT"
- name: Run MicroPython build container
run: |
docker run --rm \
-e HOST_UID=${{ steps.runner_ids.outputs.uid }} \
-e HOST_GID=${{ steps.runner_ids.outputs.gid }} \
-e PROJECT_DIR=/project \
-e BOARD=${{ vars.BOARD }} \
-e FREEZE_BOOT=${{ vars.FREEZE_BOOT }} \
-e FREEZE_MAIN=${{ vars.FREEZE_MAIN }} \
-v "$PWD:/project" \
rav3nh01m/micropython_esp-idf:${{ steps.docker_tag.outputs.image_tag }}
- name: Copy firmware UF2
run: |
mkdir -p ./release
cp ./dist/firmware.uf2 ./release/firmware-${{env.BUILD_VERSION}}.uf2
- name: Create firmware zip
working-directory: ./release
run: zip -j firmware-${{env.BUILD_VERSION}}.zip firmware-${{env.BUILD_VERSION}}.uf2
- name: Clean firmware modules & manifest
run: |
rm -rf ./modules
rm -f ./manifest.py
- name: Create code directory
run: mkdir -p ./release/code
- name: Copy .vscode
run: |
if [ -d ".vscode" ]; then
cp -R .vscode ./release/code/
echo "Copied .vscode"
else
echo ".vscode directory not found — skipping"
fi
- name: Copy lib
run: |
if [ -d "lib" ]; then
cp -R lib ./release/code/
echo "Copied lib"
else
echo "lib directory not found — skipping"
fi
- name: Copy main.py (if not frozen)
if: ${{ vars.FREEZE_MAIN != 'true' }}
run: |
if [ -f "main.py" ]; then
cp main.py ./release/code/
echo "Copied main.py"
else
echo "main.py not found — skipping"
fi
- name: Copy boot.py (if not frozen)
if: ${{ vars.FREEZE_BOOT != 'true' }}
run: |
if [ -f "boot.py" ]; then
cp boot.py ./release/code/
echo "Copied main.py"
else
echo "boot.py not found — skipping"
fi
- name: Create code zip
working-directory: ./release/code
run: zip -r ../code-${{env.BUILD_VERSION}}.zip .
- name: Authenticate Git
run: git remote set-url origin https://x-access-token:${{secrets.GITHUB_TOKEN}}@github.com/${{github.repository}}
- name: Create tag
run: |
git config user.name "github-actions"
git config user.email "github-actions@github.com"
git tag ${{env.BUILD_VERSION}}
git push origin ${{env.BUILD_VERSION}}
- name: Create Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{env.BUILD_VERSION}}
name: Release ${{env.BUILD_VERSION}}
prerelease: ${{vars.IS_PRERELEASE}}
files: |
./release/firmware-${{env.BUILD_VERSION}}.zip
./release/code-${{env.BUILD_VERSION}}.zip
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}