From d61539d30fb99f8d78cffa410c2c44c22147f934 Mon Sep 17 00:00:00 2001 From: loudnl Date: Wed, 20 Nov 2024 16:58:13 +0100 Subject: [PATCH] Add release workflow --- .github/workflows/release.yml | 246 ++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..0369f74 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,246 @@ +name: USBSID-Pico Release + +env: + BUILD_THREADS: 4 + BUILD_TYPE: Release + # Pico-SDK version + PICO_SDK_REF: 2.0.0 + PICO_EXTRAS_REF: sdk-2.0.0 + PICOTOOL_REF: 2.0.0 + +on: + push: + branches: [master] + tags: + - "*" + # Allows you to run this workflow manually from the Actions tab when needed + # workflow_dispatch: + +jobs: + release: + name: Create release files + runs-on: ubuntu-latest + permissions: + contents: write + needs: build + # job will only start if there is a new tag + if: startsWith(github.ref, 'refs/tags/') + steps: + - name: Branch latest + id: branch_name + run: | + echo "IS_TAG=${{ startsWith(github.ref, 'refs/tags/') }}" >> $GITHUB_OUTPUT + echo "SOURCE_TAG=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT + echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT + + - name: 📇 Checkout project + uses: actions/checkout@v4 + with: + fetch-depth: 0 + # path: master + + - name: Generate release notes + env: + IS_TAG: ${{ steps.branch_name.outputs.IS_TAG }} + SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }} + if: "${{ env.IS_TAG == 'true' }}" + id: release-notes + run: | + echo "**Commits in this release:**" > release_notes.md + git log $(git tag --sort version:refname | tail -n 2 | head -n 1)..HEAD --oneline >> release_notes.md + + - name: Download all archived artifacts + env: + IS_TAG: ${{ steps.branch_name.outputs.IS_TAG }} + SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }} + if: "${{ env.IS_TAG == 'true' }}" + uses: actions/download-artifact@v4 # https://github.com/actions/download-artifact + with: + path: release + pattern: releasebuild-usbsid* + merge-multiple: true + + - name: View folder content + env: + IS_TAG: ${{ steps.branch_name.outputs.IS_TAG }} + SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }} + if: "${{ env.IS_TAG == 'true' }}" + run: ls -R + + - name: Create tagged release + id: create_release + env: + IS_TAG: ${{ steps.branch_name.outputs.IS_TAG }} + SOURCE_TAG: ${{ steps.branch_name.outputs.SOURCE_TAG }} + if: "${{ env.IS_TAG == 'true' }}" + uses: ncipollo/release-action@v1 # https://github.com/ncipollo/release-action + with: + tag: ${{ env.SOURCE_TAG }} + name: ${{ env.SOURCE_TAG }} + token: ${{ secrets.GITHUB_TOKEN }} + artifacts: "release/*.uf2" + prerelease: false + removeArtifacts: true + generateReleaseNotes: true + bodyFile: "release_notes.md" + + build: + name: Build + runs-on: ubuntu-latest + + strategy: + matrix: + include: + - { + buildname: Pico, + directory: pico, + pico_board: pico, + pico_platform: rp2040, + } + - { + buildname: Pico_W, + directory: picow, + pico_board: pico_w, + pico_platform: rp2040, + } + - { + buildname: Pico2, + directory: pico2, + pico_board: pico2, + pico_platform: rp2350-arm-s, + } + + fail-fast: false + + if: startsWith(github.ref, 'refs/tags/') + steps: + - name: 🛠️ Arm GNU Toolchain (arm-none-eabi-gcc) + uses: carlosperate/arm-none-eabi-gcc-action@v1 + + - name: Install Act dependencies + if: ${{ env.ACT }} + run: | + apt-get update && apt-get install sudo -y + + - name: Install dependencies + if: ${{ env.ACT }} + run: | + sudo apt-get update && sudo apt-get install curl build-essential cmake -y + + - name: 🗒️ Check GCC Version + id: compiler-version + run: | + arm-none-eabi-gcc --version + ver=$(arm-none-eabi-gcc --version | head -1) + echo "CC_VERSION=$ver" >> $GITHUB_OUTPUT + + - name: 💽 Cache Pico-SDK + id: cache-pico-sdk + uses: actions/cache@v4 + with: + path: pico-sdk + key: ${{runner.os}}-pico-sdk-${{env.PICO_SDK_REF}} + + - name: 📇 Checkout Pico-SDK + if: ${{steps.cache-pico-sdk.outputs.cache-hit != 'true' }} + uses: actions/checkout@v4 + with: + repository: raspberrypi/pico-sdk + ref: ${{env.PICO_SDK_REF}} + path: pico-sdk + submodules: recursive + + - name: 🔖 Add PICO_SDK_PATH to Environment + run: | + echo "PICO_SDK_PATH=${{github.workspace}}/pico-sdk" >> $GITHUB_ENV + cd pico-sdk/lib/tinyusb + git checkout master + git pull + python3 tools/get_deps.py rp2040 + + - name: 💽 Cache Pico-Extras + id: cache-pico-extras + uses: actions/cache@v4 + with: + path: pico-extras + key: ${{runner.os}}-pico-extras-${{env.PICO_EXTRAS_REF}} + + - name: 📇 Checkout Pico-Extras + if: ${{steps.cache-pico-extras.outputs.cache-hit != 'true' }} + uses: actions/checkout@v4 + with: + repository: raspberrypi/pico-extras + ref: ${{env.PICO_EXTRAS_REF}} + path: pico-extras + submodules: recursive + + - name: 🔖 Add PICO_EXTRAS_PATH to Environment + run: | + echo "PICO_EXTRAS_PATH=${{github.workspace}}/pico-extras" >> $GITHUB_ENV + ls pico-extras/external -la + + - name: 💽 Cache picotool + id: cache-picotool + uses: actions/cache@v4 + with: + path: picotool + key: ${{runner.os}}-picotool-${{env.PICOTOOL_REF}} + + - name: 📇 Checkout picotool + if: ${{steps.cache-picotool.outputs.cache-hit != 'true' }} + uses: actions/checkout@v4 + with: + repository: raspberrypi/picotool + ref: ${{env.PICOTOOL_REF}} + path: picotool-src + submodules: recursive + + - name: 🏭 Build picotool + if: ${{steps.cache-picotool.outputs.cache-hit != 'true' }} + run: | + cmake -S picotool-src -B picotool-src/build -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/picotool -DPICOTOOL_FLAT_INSTALL=1 + cd picotool-src/build + make -j ${{env.BUILD_THREADS}} install + + - name: 📇 Checkout project + uses: actions/checkout@v4 + with: + path: master + + - name: 🏭 Create build folders + run: | + mkdir -p ${{github.workspace}}/master/build_${{matrix.directory}} + + - name: 🏭 Setup CMAKE + run: | + unset PICO_PLATFORM + unset PICO_BOARD + cmake -S master -B ${{github.workspace}}/master/build_${{matrix.directory}} -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DPICO_PLATFORM=${{matrix.pico_platform}} -DPICO_BOARD=${{matrix.pico_board}} -Dpicotool_DIR=${{github.workspace}}/picotool/picotool $extra_arg + + - name: 🏭 Build ${{matrix.name}} + run: | + cmake --build ${{github.workspace}}/master/build_${{matrix.directory}} --config ${{env.BUILD_TYPE}} -j ${{env.BUILD_THREADS}} + + - name: List build files + run: | + ls ${{github.workspace}}/master/build_${{matrix.directory}}/*.uf2 -la + + - name: 💾 Gather Artifact Files + working-directory: ${{github.workspace}}/master + run: | + mkdir dist + cp -av build_${{matrix.directory}}/*.uf2 dist/ + + - name: Get current branch + run: | + echo "BRANCHNAME=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_ENV + + - name: Get current datetime + run: | + echo "DATETIME=$(date +'%Y%m%dT%H%M%S')" >> $GITHUB_ENV + + - name: 💾 Upload Artifacts + uses: actions/upload-artifact@v4 + with: + name: releasebuild-usbsid${{matrix.pico_board}} + path: ${{github.workspace}}/master/dist