Build and Push OR check-PR #375
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| --- | |
| name: Build and Push OR check-PR | |
| on: | |
| pull_request: | |
| branches: | |
| - main | |
| push: | |
| branches: | |
| - main | |
| - dev | |
| tags: | |
| - "*" | |
| workflow_dispatch: | |
| jobs: | |
| compile_sketch: | |
| name: Build ${{ matrix.board.env }} | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| board: | |
| #- { env: "arduino-nesso-n1" } | |
| - { env: "m5stack-cardputer" } | |
| - { env: "m5stack-cplus2" } | |
| - { env: "m5stack-cplus1_1" } | |
| - { env: "m5stack-c" } | |
| - { env: "m5stack-core2" } | |
| - { env: "m5stack-core" } | |
| - { env: "m5stack-core-4Mb" } | |
| - { env: "m5stack-cores3" } | |
| - { env: "m5stack-tab5" } | |
| - { env: "m5stack-paper-s3" } | |
| - { env: "m5stack-paper" } | |
| - { env: "headless-esp32s3-4mb" } | |
| - { env: "headless-esp32s3-8mb" } | |
| - { env: "headless-esp32s3-16mb" } | |
| - { env: "headless-esp32-4mb" } | |
| - { env: "headless-esp32-8mb" } | |
| - { env: "CYD-2432S028" } | |
| - { env: "CYD-2-USB" } | |
| - { env: "CYD-2432W328C_2" } | |
| - { env: "CYD-2432W328C" } | |
| - { env: "CYD-2432W328R" } | |
| - { env: "CYD-2432S024R" } | |
| - { env: "CYD-2432S022C" } | |
| - { env: "CYD-2432S032C" } | |
| - { env: "CYD-2432S032R" } | |
| - { env: "CYD-3248S035R" } | |
| - { env: "CYD-3248S035C" } | |
| - { env: "CYD-8048S043C" } | |
| - { env: "CYD-8048W550C" } | |
| - { env: "CYD-3248W535C" } | |
| - { env: "CYD-4827S043R" } | |
| - { env: "lilygo-t-dongle-s3-tft" } | |
| - { env: "lilygo-t-display-S3-touch" } | |
| - { env: "lilygo-t-display-S3-pro" } | |
| - { env: "lilygo-t-embed" } | |
| - { env: "lilygo-t-embed-cc1101" } | |
| - { env: "lilygo-t-lora-pager" } | |
| - { env: "lilygo-t-deck-plus" } | |
| - { env: "lilygo-t-deck" } | |
| - { env: "lilygo-t-deck-pro" } | |
| - { env: "lilygo-t5-epaper-s3-pro" } | |
| - { env: "lilygo-t-hmi" } | |
| - { env: "lilygo-t-display-S3-amoled" } | |
| - { env: "smoochiee-board" } | |
| - { env: "Marauder-v4-OG" } | |
| - { env: "Marauder-v61" } | |
| - { env: "Marauder-v7" } | |
| - { env: "Marauder-Mini" } | |
| - { env: "Awok-Mini" } | |
| - { env: "Awok-Touch" } | |
| - { env: "WaveSentry-R1" } | |
| - { env: "Phantom_S024R" } | |
| - { env: "elecrow-24B" } | |
| - { env: "elecrow-28B" } | |
| - { env: "elecrow-35B" } | |
| - { env: "elecrow-35Bv2_2" } | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - id: build | |
| name: setup Python | |
| uses: actions/setup-python@v2 | |
| with: | |
| python-version: "3.13" | |
| - name: Install dependencies | |
| run: | | |
| pip install requests esptool | |
| - name: Install PlatformIO Core | |
| run: | | |
| pip install platformio | |
| if [[ "${{ github.ref_type }}" == "tag" ]]; then | |
| version=${{ github.ref_name }} | |
| else | |
| version="${GITHUB_SHA::7}" | |
| fi | |
| sed -i "s/-DLAUNCHER=/-DLAUNCHER='\"$version\"' ; /g" ./platformio.ini | |
| - name: Run Compile | |
| run: | | |
| platformio run -e ${{ matrix.board.env }} | |
| - name: Upload Artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Artifacts-${{ matrix.board.env }} | |
| path: | | |
| Launcher-*.bin | |
| retention-days: 5 | |
| if-no-files-found: error | |
| post_compile_steps: | |
| name: Post-compile steps | |
| runs-on: ubuntu-latest | |
| needs: compile_sketch | |
| if: (github.event_name == 'push' || github.event_name == 'workflow_dispatch') || github.ref_type == 'tag' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| ref: WebPage | |
| fetch-depth: 1 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ~/LauncherArtifacts | |
| - name: Move artifacts to the correct folders | |
| run: | | |
| set -x | |
| pwd | |
| mkdir -p artifacts | |
| cp -f ~/LauncherArtifacts/*/*.bin artifacts | |
| tree | |
| - name: Ensure releases exist and get IDs | |
| id: get_release | |
| uses: actions/github-script@v7 | |
| with: | |
| script: | | |
| const ensureByTag = async (tag, prerelease=true) => { | |
| try { | |
| const { data } = await github.rest.repos.getReleaseByTag({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| tag | |
| }); | |
| return data.id; | |
| } catch (e) { | |
| if (e.status !== 404) throw e; | |
| const { data } = await github.rest.repos.createRelease({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| tag_name: tag, | |
| name: tag, | |
| prerelease | |
| }); | |
| return data.id; | |
| } | |
| }; | |
| const betaId = await ensureByTag('beta'); | |
| const lastId = await ensureByTag('last'); | |
| core.setOutput('beta', String(betaId)); | |
| core.setOutput('last', String(lastId)); | |
| - name: Get current sha | |
| id: get_sha | |
| run: | | |
| echo "GITHUB_SHA_SHORT=${GITHUB_SHA::7}" >> $GITHUB_OUTPUT | |
| - name: Delete old betaRelease assets | |
| uses: actions/github-script@v6 | |
| with: | |
| script: | | |
| const release_id = ${{ steps.get_release.outputs.beta }}; | |
| const assets = await github.rest.repos.listReleaseAssets({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| release_id: release_id | |
| }); | |
| for (const asset of assets.data) { | |
| await github.rest.repos.deleteReleaseAsset({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| asset_id: asset.id | |
| }); | |
| } | |
| - name: Upload new beta asset | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| name: betaRelease commit (${{ steps.get_sha.outputs.GITHUB_SHA_SHORT }}) | |
| tag_name: beta | |
| files: artifacts/** | |
| fail_on_unmatched_files: false | |
| make_latest: false | |
| generate_release_notes: false | |
| - name: Delete old lastRelease assets | |
| uses: actions/github-script@v6 | |
| if: github.ref_type == 'tag' | |
| with: | |
| script: | | |
| const release_id = ${{ steps.get_release.outputs.last }}; | |
| const assets = await github.rest.repos.listReleaseAssets({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| release_id: release_id | |
| }); | |
| for (const asset of assets.data) { | |
| await github.rest.repos.deleteReleaseAsset({ | |
| owner: context.repo.owner, | |
| repo: context.repo.repo, | |
| asset_id: asset.id | |
| }); | |
| } | |
| - name: Upload new last asset | |
| uses: softprops/action-gh-release@v2 | |
| if: github.ref_type == 'tag' | |
| with: | |
| name: lastRelease commit (${{ steps.get_sha.outputs.GITHUB_SHA_SHORT }}) | |
| tag_name: last | |
| prerelease: true | |
| files: artifacts/** | |
| fail_on_unmatched_files: false | |
| make_latest: false | |
| generate_release_notes: false | |
| - name: Trigger WebPage deploy (workflow_dispatch) | |
| if: ${{ success() }} | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| run: | | |
| gh workflow list | |
| gh workflow run .github/workflows/deploy.yml --ref WebPage | |
| create_release: | |
| runs-on: ubuntu-latest | |
| environment: github_release | |
| needs: [compile_sketch] | |
| if: github.ref_type == 'tag' | |
| steps: | |
| - id: launcher_version | |
| name: Get Version | |
| run: | | |
| set -x | |
| version=${{ github.ref_name }} | |
| echo "version=${version}" > $GITHUB_OUTPUT | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| merge-multiple: true | |
| - name: List all files | |
| if: always() | |
| run: | | |
| set -x | |
| pwd | |
| ls -all | |
| tree | |
| - name: Create Release ${{ steps.launcher_version.outputs.version }} | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| name: Launcher Release ${{ steps.launcher_version.outputs.version }} | |
| tag_name: ${{ steps.launcher_version.outputs.version }} | |
| generate_release_notes: true | |
| files: | | |
| Launcher-*.bin |