feat: add support for 1.21.8 #1
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: Release | |
| on: | |
| push: | |
| branches: | |
| - master | |
| - main | |
| tags: | |
| - 'v*' | |
| paths: | |
| - 'binaries/**' | |
| - 'crates/**' | |
| - 'data/generated/**' | |
| - 'Cargo.lock' | |
| - 'Cargo.toml' | |
| - 'Dockerfile' | |
| workflow_dispatch: | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| BINARY_NAME: pico_limbo | |
| jobs: | |
| build-linux: | |
| strategy: | |
| matrix: | |
| include: | |
| - target: x86_64-unknown-linux-musl | |
| name: linux-x86_64-musl | |
| runner: ubuntu-latest | |
| - target: aarch64-unknown-linux-musl | |
| name: linux-aarch64-musl | |
| runner: ubuntu-24.04-arm | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Install musl-tools | |
| run: | | |
| sudo apt-get update -y | |
| sudo apt-get install -y musl-tools | |
| - name: Add Rust target | |
| run: rustup target add ${{ matrix.target }} | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-${{ runner.arch }}-cargo-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-${{ runner.arch }}-cargo-${{ matrix.target }}- | |
| ${{ runner.os }}-${{ runner.arch }}-cargo- | |
| - name: Build | |
| run: cargo build --release --target ${{ matrix.target }} --bin ${{ env.BINARY_NAME }} | |
| - name: Prepare artifacts | |
| run: | | |
| mkdir -p artifacts | |
| cp target/${{ matrix.target }}/release/${{ env.BINARY_NAME }} artifacts/ | |
| cp -R data/generated artifacts/assets | |
| cd artifacts && tar -czf ../${{ env.BINARY_NAME }}_${{ matrix.name }}.tar.gz * | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.BINARY_NAME }}_${{ matrix.name }} | |
| path: ${{ env.BINARY_NAME }}_${{ matrix.name }}.tar.gz | |
| build-macos: | |
| runs-on: macos-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Add Rust target | |
| run: rustup target add aarch64-apple-darwin | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-aarch64-apple-darwin-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-aarch64-apple-darwin- | |
| ${{ runner.os }}-cargo- | |
| - name: Build | |
| run: cargo build --release --target aarch64-apple-darwin --bin ${{ env.BINARY_NAME }} | |
| - name: Prepare artifacts | |
| run: | | |
| mkdir -p artifacts | |
| cp target/aarch64-apple-darwin/release/${{ env.BINARY_NAME }} artifacts/ | |
| cp -R data/generated artifacts/assets | |
| cd artifacts && tar -czf ../${{ env.BINARY_NAME }}_macos-aarch64.tar.gz * | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.BINARY_NAME }}_macos-aarch64 | |
| path: ${{ env.BINARY_NAME }}_macos-aarch64.tar.gz | |
| build-windows: | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Cache Cargo dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/registry | |
| ~/.cargo/git | |
| target | |
| key: ${{ runner.os }}-cargo-x86_64-pc-windows-msvc-${{ hashFiles('**/Cargo.lock') }} | |
| restore-keys: | | |
| ${{ runner.os }}-cargo-x86_64-pc-windows-msvc- | |
| ${{ runner.os }}-cargo- | |
| - name: Build | |
| run: cargo build --release --target x86_64-pc-windows-msvc --bin ${{ env.BINARY_NAME }} | |
| - name: Prepare artifacts | |
| run: | | |
| mkdir artifacts | |
| Copy-Item "target/x86_64-pc-windows-msvc/release/${{ env.BINARY_NAME }}.exe" artifacts/ | |
| Copy-Item "data/generated" "artifacts/assets" -Recurse | |
| Compress-Archive -Path artifacts/* -DestinationPath "${{ env.BINARY_NAME }}_windows-x86_64.zip" -Force | |
| - name: Upload artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.BINARY_NAME }}_windows-x86_64 | |
| path: ${{ env.BINARY_NAME }}_windows-x86_64.zip | |
| build-docker: | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - platform: linux/amd64 | |
| runner: ubuntu-latest | |
| - platform: linux/arm64 | |
| runner: ubuntu-24.04-arm | |
| runs-on: ${{ matrix.runner }} | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Prepare | |
| run: | | |
| platform=${{ matrix.platform }} | |
| echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ghcr.io/${{ github.repository }} | |
| - name: Prepare repository name | |
| run: | | |
| echo "REPO_LC=${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV | |
| - name: Build and push by digest | |
| id: build | |
| uses: docker/build-push-action@v5 | |
| with: | |
| context: . | |
| platforms: ${{ matrix.platform }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| tags: ghcr.io/${{ env.REPO_LC }} | |
| outputs: type=image,push-by-digest=true,name-canonical=true,push=true | |
| cache-from: type=gha,scope=${{ env.PLATFORM_PAIR }}-${{ matrix.runner }} | |
| cache-to: type=gha,mode=max,scope=${{ env.PLATFORM_PAIR }}-${{ matrix.runner }} | |
| build-args: | | |
| BINARY_NAME=${{ env.BINARY_NAME }} | |
| - name: Export digest | |
| run: | | |
| mkdir -p ${{ runner.temp }}/digests | |
| digest="${{ steps.build.outputs.digest }}" | |
| touch "${{ runner.temp }}/digests/${digest#sha256:}" | |
| - name: Upload digest | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: digests-${{ env.PLATFORM_PAIR }} | |
| path: ${{ runner.temp }}/digests/* | |
| if-no-files-found: error | |
| retention-days: 1 | |
| merge-docker: | |
| runs-on: ubuntu-latest | |
| needs: build-docker | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Download digests | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ${{ runner.temp }}/digests | |
| pattern: digests-* | |
| merge-multiple: true | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log in to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata | |
| id: meta | |
| uses: docker/metadata-action@v5 | |
| with: | |
| images: ghcr.io/${{ github.repository }} | |
| tags: | | |
| type=ref,event=branch | |
| type=ref,event=tag | |
| type=raw,value=latest,enable={{is_default_branch}} | |
| - name: Prepare repository name | |
| run: | | |
| echo "REPO_LC=${GITHUB_REPOSITORY,,}" >> $GITHUB_ENV | |
| - name: Create manifest list and push | |
| working-directory: ${{ runner.temp }}/digests | |
| run: | | |
| docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ | |
| $(printf 'ghcr.io/${{ env.REPO_LC }}@sha256:%s ' *) | |
| - name: Inspect image | |
| run: | | |
| docker buildx imagetools inspect ghcr.io/${{ env.REPO_LC }}:${{ steps.meta.outputs.version }} | |
| release: | |
| if: github.event_name == 'push' && (contains(github.ref, 'refs/heads/') || contains(github.ref, 'refs/tags/')) | |
| permissions: | |
| contents: write | |
| runs-on: ubuntu-latest | |
| needs: | |
| - build-linux | |
| - build-macos | |
| - build-windows | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Generate release info | |
| id: release_info | |
| run: | | |
| if [[ "${GITHUB_REF}" == refs/tags/* ]]; then | |
| # Tag push - use tag name and set prerelease to false | |
| TAG_NAME=${GITHUB_REF#refs/tags/} | |
| echo "tag_name=${TAG_NAME}" >> $GITHUB_OUTPUT | |
| echo "release_name=Release ${TAG_NAME}" >> $GITHUB_OUTPUT | |
| echo "prerelease=false" >> $GITHUB_OUTPUT | |
| else | |
| # Branch push - generate tag and set prerelease to true | |
| BRANCH_NAME=${GITHUB_REF#refs/heads/} | |
| SHORT_SHA=${GITHUB_SHA:0:7} | |
| TAG_NAME="${BRANCH_NAME}-${SHORT_SHA}" | |
| echo "tag_name=${TAG_NAME}" >> $GITHUB_OUTPUT | |
| echo "release_name=Release ${TAG_NAME}" >> $GITHUB_OUTPUT | |
| echo "prerelease=true" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: ./artifacts | |
| pattern: ${{ env.BINARY_NAME }}_* | |
| merge-multiple: true | |
| - name: Create release and upload assets | |
| uses: softprops/action-gh-release@v2 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| with: | |
| tag_name: ${{ steps.release_info.outputs.tag_name }} | |
| name: ${{ steps.release_info.outputs.release_name }} | |
| draft: false | |
| prerelease: ${{ steps.release_info.outputs.prerelease }} | |
| files: ./artifacts/* |