Skip to content

checkout path

checkout path #349

Workflow file for this run

name: Release Build
on:
push:
branches:
- release/**
jobs:
linux:
strategy:
fail-fast: false
matrix:
include:
- arch: i686
target: i686-unknown-linux-musl
container: i686-musl
- arch: x86_64
target: x86_64-unknown-linux-musl
container: x86_64-musl
- arch: armv7
target: armv7-unknown-linux-musleabi
container: armv7-musleabi
- arch: aarch64
target: aarch64-unknown-linux-musl
container: aarch64-musl
name: Linux ${{ matrix.arch }}
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v2
- name: Build in Docker
run: scripts/build-in-docker.sh
env:
TARGET: ${{ matrix.target }}
DOCKER_TAG: ${{ matrix.container }}
- name: Rename Binary
run: mv target/*/release/sentry-cli sentry-cli-Linux-${{ matrix.arch }}
- uses: actions/upload-artifact@v4
with:
name: artifact-bin-linux-${{ matrix.arch }}
path: sentry-cli-Linux-${{ matrix.arch }}
if-no-files-found: 'error'
macos:
strategy:
fail-fast: false
matrix:
include:
- arch: x86_64
target: x86_64-apple-darwin
- arch: arm64
target: aarch64-apple-darwin
name: macOS ${{ matrix.arch }}
runs-on: macos-14
steps:
- uses: actions/checkout@v2
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # pin@v1
with:
toolchain: stable
target: ${{ matrix.target }}
profile: minimal
override: true
- name: Run Cargo Build
uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # pin@v1
with:
command: build
args: --target=${{ matrix.target }} --release --locked
- name: Rename Binary
run: mv target/${{ matrix.target }}/release/sentry-cli sentry-cli-Darwin-${{ matrix.arch }}
- uses: actions/upload-artifact@v4
with:
name: unsigned-bin-macos-${{ matrix.arch }}
path: sentry-cli-Darwin-${{ matrix.arch }}
if-no-files-found: 'error'
macos_universal:
needs: macos
name: macOS universal
runs-on: macos-14
steps:
- uses: actions/download-artifact@v4
with:
pattern: unsigned-bin-macos-*
merge-multiple: true
- name: Link universal binary
run: lipo -create -output sentry-cli-Darwin-universal sentry-cli-Darwin-x86_64 sentry-cli-Darwin-arm64
- uses: actions/upload-artifact@v4
with:
name: unsigned-bin-macos-universal
path: sentry-cli-Darwin-universal
if-no-files-found: 'error'
sign-macos-binaries:
strategy:
fail-fast: false
matrix:
include:
- arch: universal
- arch: x86_64
- arch: arm64
needs: [macos, macos_universal]
name: Sign & Notarize macOS Binary (${{ matrix.arch }})
runs-on: ubuntu-24.04
env:
APPLE_CERT_PATH: /tmp/certs.p12
APPLE_API_KEY_PATH: /tmp/apple_key.json
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Decode Apple signing certificate and API key
env:
APPLE_CERT_DATA: ${{ secrets.APPLE_CERT_DATA }}
APPLE_API_KEY: ${{ secrets.APPLE_API_KEY }}
run: |
echo $APPLE_CERT_DATA | base64 --decode > ${{ env.APPLE_CERT_PATH }}
echo $APPLE_API_KEY | base64 --decode > ${{ env.APPLE_API_KEY_PATH }}
- name: Download unsigned binary
uses: actions/download-artifact@v4
with:
name: unsigned-bin-macos-${{ matrix.arch }}
- name: Debug
run: |
echo "Current directory:"
pwd
echo "Files in current directory:"
ls -Rla .
- name: Sign binary
uses: indygreg/apple-code-sign-action@v1
with:
input_path: sentry-cli-Darwin-${{ matrix.arch }}
p12_file: ${{ env.APPLE_CERT_PATH }}
p12_password: ${{ secrets.APPLE_CERT_PASSWORD }}
config_file: sentry-cli/rcodesign.toml
- name: Zip signed binary
run: |
zip sentry-cli-Darwin-${{ matrix.arch }}.zip sentry-cli-Darwin-${{ matrix.arch }}
- name: Notarize binary
uses: indygreg/apple-code-sign-action@v1
with:
input_path: sentry-cli-Darwin-${{ matrix.arch }}.zip
sign: false
notarize: true
app_store_connect_api_key_json_file: ${{ env.APPLE_API_KEY_PATH }}
- name: Upload signed binary
uses: actions/upload-artifact@v4
with:
name: artifact-bin-macos-${{ matrix.arch }}
path: sentry-cli-Darwin-${{ matrix.arch }}.zip
if-no-files-found: 'error'
windows:
strategy:
fail-fast: false
matrix:
arch: [i686, x86_64]
name: Windows ${{ matrix.arch }}
runs-on: windows-2019
steps:
- uses: actions/checkout@v2
# When rustup is updated, it tries to replace its binary, which on Windows is somehow locked.
# This can result in the CI failure, see: https://github.com/rust-lang/rustup/issues/3029
- name: Disable rustup self-update
shell: bash
run: rustup set auto-self-update disable
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # pin@v1
with:
toolchain: stable-${{ matrix.arch }}-pc-windows-msvc
profile: minimal
override: true
- name: Run Cargo Build
uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # pin@v1
with:
command: build
args: --release --locked
- name: Rename Binary
run: mv target/release/sentry-cli.exe sentry-cli-Windows-${{ matrix.arch }}.exe
- uses: actions/upload-artifact@v4
with:
name: artifact-bin-windows-${{ matrix.arch }}
path: sentry-cli-Windows-${{ matrix.arch }}.exe
if-no-files-found: 'error'
node:
name: NPM Package
runs-on: ubuntu-24.04
needs: [linux, macos, macos_universal, windows]
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '20.10.0'
- name: Download compiled binaries
uses: actions/download-artifact@v4
with:
pattern: artifact-bin-*
merge-multiple: true
- name: Calculate and store checksums
shell: bash
run: |
sha256sum sentry-cli-* | awk '{printf("%s=%s\n", $2, $1)}' > checksums.txt
cat checksums.txt
- run: npm pack
- uses: actions/upload-artifact@v4
with:
name: artifact-pkg-node
path: '*.tgz'
if-no-files-found: 'error'
python-base:
name: python (base)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # pin@v1
with:
toolchain: stable
target: x86_64-unknown-linux-musl
profile: minimal
override: true
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- run: python3 -m pip install build && python3 -m build
- uses: actions/upload-artifact@v4
with:
name: python-base
path: dist/*
if-no-files-found: 'error'
python:
name: python
runs-on: ubuntu-24.04
needs: [linux, macos, macos_universal, windows, python-base]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
with:
python-version: '3.11'
- uses: actions/download-artifact@v4
with:
pattern: artifact-bin-*
merge-multiple: true
path: binaries
- uses: actions/download-artifact@v4
with:
name: python-base
merge-multiple: true
path: python-base
- run: scripts/wheels --binaries binaries --base python-base --dest dist
- uses: actions/upload-artifact@v4
with:
name: artifact-pkg-python
path: dist/*
if-no-files-found: 'error'
npm-distributions:
name: 'Build NPM distributions'
runs-on: ubuntu-24.04
needs: [linux, macos, macos_universal, windows]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v4
with:
node-version: '20.10.0'
- uses: actions/download-artifact@v4
with:
pattern: artifact-bin-*
merge-multiple: true
path: binary-artifacts
- name: Move binaries into distribution packages
run: |
mv binary-artifacts/sentry-cli-Darwin-universal npm-binary-distributions/darwin/bin/sentry-cli
mv binary-artifacts/sentry-cli-Linux-armv7 npm-binary-distributions/linux-arm/bin/sentry-cli
mv binary-artifacts/sentry-cli-Linux-aarch64 npm-binary-distributions/linux-arm64/bin/sentry-cli
mv binary-artifacts/sentry-cli-Linux-i686 npm-binary-distributions/linux-i686/bin/sentry-cli
mv binary-artifacts/sentry-cli-Linux-x86_64 npm-binary-distributions/linux-x64/bin/sentry-cli
mv binary-artifacts/sentry-cli-Windows-i686.exe npm-binary-distributions/win32-i686/bin/sentry-cli.exe
mv binary-artifacts/sentry-cli-Windows-x86_64.exe npm-binary-distributions/win32-x64/bin/sentry-cli.exe
- name: Remove binary placeholders
run: rm -rf npm-binary-distributions/*/bin/.gitkeep
- name: Make Linux binaries executable
run: chmod +x npm-binary-distributions/*/bin/sentry-cli
- name: Package distribution packages
run: |
for dir in npm-binary-distributions/*; do
cd $dir
npm pack
cd -
done
- name: Upload packaged npm binary distributions
uses: actions/upload-artifact@v4
with:
name: artifact-npm-binary-distributions
path: npm-binary-distributions/*/*.tgz
if-no-files-found: 'error'
platform-specific-docker:
name: Build Docker Image (${{ matrix.platform }})
strategy:
matrix:
include:
- platform: amd64
runner: ubuntu-24.04
- platform: arm64
runner: ubuntu-24.04-arm
runs-on: ${{ matrix.runner }}
permissions:
contents: read
packages: write
steps:
- uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
context: .
push: true
platforms: linux/${{ matrix.platform }}
tags: ghcr.io/${{ github.repository }}:${{ github.sha }}-${{ matrix.platform }}
cache-from: type=gha,scope=${{ matrix.platform }}
cache-to: type=gha,mode=max,scope=${{ matrix.platform }}
multiarch-docker:
name: Create Multi-Architecture Docker Image
needs: platform-specific-docker
runs-on: ubuntu-24.04
permissions:
packages: write
steps:
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create multi-architecture image
run: |
docker buildx imagetools create -t ghcr.io/${{ github.repository }}:${{ github.sha }} \
ghcr.io/${{ github.repository }}:${{ github.sha }}-amd64 \
ghcr.io/${{ github.repository }}:${{ github.sha }}-arm64
merge:
name: Create Release Artifact
runs-on: ubuntu-24.04
needs: [linux, macos, macos_universal, windows, npm-distributions, node, python]
steps:
- uses: actions/upload-artifact/merge@v4
with:
# Craft expects release assets to be a single artifact named after the sha.
name: ${{ github.sha }}
pattern: artifact-*
delete-merged: true