Update GH Actions workflow to build Brioche for aarch64-linux #419
Workflow file for this run
This file contains 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: CI | |
on: | |
push: | |
branches: | |
- main | |
- 'build/**' | |
pull_request: | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
jobs: | |
check: | |
name: Run checks | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install SQLx CLI | |
run: | | |
mkdir -p ~/.local/bin | |
curl -L https://development-content.brioche.dev/tools/sqlx-cli_v0.7.1/sqlx -o ~/.local/bin/sqlx | |
curl -L https://development-content.brioche.dev/tools/sqlx-cli_v0.7.1/cargo-sqlx -o ~/.local/bin/cargo-sqlx | |
chmod +x ~/.local/bin/sqlx ~/.local/bin/cargo-sqlx | |
echo "$HOME/.local/bin" >> $GITHUB_PATH | |
- name: Check formatting | |
run: cargo fmt -- --check | |
- name: Check database schema | |
run: make check-db-schema | |
- name: Check Clippy | |
run: cargo clippy --all -- -Dwarnings | |
- name: Install runtime distribution packages | |
run: | | |
cd crates/brioche-core/runtime | |
npm install | |
- name: Check runtime distribution types | |
run: | | |
cd crates/brioche-core/runtime | |
npm run check | |
- name: Check runtime distribution is up to date | |
run: | | |
cd crates/brioche-core/runtime | |
npm install | |
npm run build | |
if [ -n "$(git status --porcelain)" ]; then | |
git status | |
echo "NPM build in crates/brioche/runtime is out of date!" >&2 | |
echo "Re-run 'npm run build' and commit the results" >&2 | |
exit 1 | |
fi | |
test: | |
name: Run tests | |
strategy: | |
matrix: | |
runs_on: | |
- ubuntu-22.04 | |
- macos-14 | |
runs-on: ${{ matrix.runs_on }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
# Run tests in release mode. Running tests in debug mode uses a lot | |
# more disk space, so much so that it can cause the run to fail | |
- name: Run tests | |
run: cargo test --all --release | |
build: | |
name: Build artifacts | |
if: github.event_name == 'push' | |
strategy: | |
matrix: | |
platform: | |
- name: x86_64-linux | |
runs_on: ubuntu-22.04 | |
target: x86_64-unknown-linux-gnu | |
- name: aarch64-linux | |
runs_on: ubuntu-22.04 | |
target: aarch64-unknown-linux-gnu | |
features: openssl/vendored | |
install_deps: | | |
sudo apt-get install -y gcc-aarch64-linux-gnu binutils-aarch64-linux-gnu | |
echo 'CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc' >> $GITHUB_ENV | |
- name: x86_64-macos | |
runs_on: macos-14 | |
target: x86_64-apple-darwin | |
- name: aarch64-macos | |
runs_on: macos-14 | |
target: aarch64-apple-darwin | |
runs-on: ${{ matrix.platform.runs_on }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
if: matrix.platform.install_deps | |
run: ${{ matrix.platform.install_deps }} | |
- name: Install Rust targets | |
run: rustup target add "$TARGET" | |
env: | |
TARGET: ${{ matrix.platform.target }} | |
- name: Build Brioche | |
run: | | |
extra_args=() | |
if [ -n "$FEATURES" ]; then | |
extra_args+=(--features "$FEATURES") | |
fi | |
cargo build \ | |
--all \ | |
--bin brioche \ | |
--release \ | |
--target="$TARGET" \ | |
"${extra_args[@]}" | |
env: | |
TARGET: ${{ matrix.platform.target }} | |
FEATURES: ${{ matrix.platform.features }} | |
- name: Prepare artifact | |
run: | | |
mkdir -p "artifacts/brioche/$PLATFORM/" | |
cp \ | |
"target/$TARGET/release/brioche" \ | |
"artifacts/brioche/$PLATFORM/" | |
if command -v sha256sum &> /dev/null; then | |
find artifacts/ -type f | xargs sha256sum | |
fi | |
if command -v tree &> /dev/null; then | |
tree --du -h artifacts/brioche | |
fi | |
env: | |
PLATFORM: ${{ matrix.platform.name }} | |
TARGET: ${{ matrix.platform.target }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: brioche-${{ matrix.platform.name }} | |
if-no-files-found: error | |
path: artifacts/brioche | |
push: | |
name: Push artifacts | |
if: github.event_name == 'push' && github.repository == 'brioche-dev/brioche' | |
needs: [check, test, build] | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Download artifacts (x86_64-linux) | |
uses: actions/download-artifact@v4 | |
with: | |
name: brioche-x86_64-linux | |
path: artifacts/brioche | |
- name: Download artifacts (aarch64-linux) | |
uses: actions/download-artifact@v4 | |
with: | |
name: brioche-aarch64-linux | |
path: artifacts/brioche | |
- name: Download artifacts (x86_64-macos) | |
uses: actions/download-artifact@v4 | |
with: | |
name: brioche-x86_64-macos | |
path: artifacts/brioche | |
- name: Download artifacts (aarch64-macos) | |
uses: actions/download-artifact@v4 | |
with: | |
name: brioche-aarch64-macos | |
path: artifacts/brioche | |
# Upload the Brioche build for the current branch | |
- name: Prepare upload | |
run: | | |
mkdir -p artifacts/uploads/branch | |
cp -r artifacts/brioche/* artifacts/uploads/branch/ | |
if command -v tree &> /dev/null; then | |
tree --du -h artifacts/uploads/branch | |
fi | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.R2_S3_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_S3_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ${{ vars.R2_S3_REGION }} | |
S3_ENDPOINT: ${{ secrets.R2_S3_ENDPOINT }} | |
- name: Upload to S3 | |
run: | | |
aws s3 sync \ | |
--endpoint "$S3_ENDPOINT" \ | |
--delete \ | |
artifacts/uploads/branch/ \ | |
"s3://brioche-dev-development-content/github.com/brioche-dev/brioche/branches/$GITHUB_REF_NAME/" | |
env: | |
AWS_ACCESS_KEY_ID: ${{ secrets.R2_S3_ACCESS_KEY_ID }} | |
AWS_SECRET_ACCESS_KEY: ${{ secrets.R2_S3_SECRET_ACCESS_KEY }} | |
AWS_DEFAULT_REGION: ${{ vars.R2_S3_REGION }} | |
S3_ENDPOINT: ${{ secrets.R2_S3_ENDPOINT }} | |