Skip to content

Release

Release #1445

Workflow file for this run

name: Release
env:
APP_NAME: moon
on:
# Manually release cli/core packages
workflow_dispatch:
# Test on master to ensure PRs are good
push:
branches:
- master
- develop-*
- release-*
# Uncomment to test in PRs (its safe)
# pull_request:
permissions:
contents: write
id-token: write
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
host: ubuntu-20.04
binary: moon
docker-target: bin-gnu
docker-platform: linux/amd64
- target: x86_64-unknown-linux-musl
host: ubuntu-20.04
binary: moon
docker-target: bin-musl
docker-platform: linux/amd64
- target: aarch64-unknown-linux-gnu
host: ubuntu-20.04
binary: moon
docker-target: bin-gnu
docker-platform: linux/arm64
- target: aarch64-unknown-linux-musl
host: ubuntu-20.04
binary: moon
docker-target: bin-musl
docker-platform: linux/arm64
- target: x86_64-apple-darwin
host: macos-12
binary: moon
setup: |
export MACOSX_DEPLOYMENT_TARGET="10.13";
- target: aarch64-apple-darwin
host: macos-12
binary: moon
setup: |
export CC=$(xcrun -f clang);
export CXX=$(xcrun -f clang++);
export SDKROOT=$(xcrun -sdk macosx --show-sdk-path);
export CFLAGS="-isysroot $SDKROOT -isystem $SDKROOT";
export MACOSX_DEPLOYMENT_TARGET=$(xcrun -sdk macosx --show-sdk-platform-version);
- target: x86_64-pc-windows-msvc
host: windows-2022
binary: moon.exe
name: Stable - ${{ matrix.target }}
runs-on: ${{ matrix.host }}
steps:
- uses: actions/checkout@v4
- uses: moonrepo/setup-rust@v1
if: ${{ !matrix.docker-target }}
with:
targets: ${{ matrix.target }}
- name: Generate lockfile
if: ${{ !matrix.docker-target }}
run: cargo generate-lockfile
- name: Setup toolchain
if: ${{ matrix.setup }}
run: ${{ matrix.setup }}
- name: Build binary
if: ${{ !matrix.docker-target }}
run: bash ./scripts/release/buildBinary.sh
env:
BINARY: ${{ matrix.binary }}
TARGET: ${{ matrix.target }}
- name: Install Depot CLI
if: ${{ matrix.docker-target }}
uses: depot/setup-action@v1
- name: Build binary with Docker / Depot
if: ${{ matrix.docker-target }}
uses: depot/build-push-action@v1
with:
context: .
file: ./scripts/Dockerfile
target: ${{ matrix.docker-target }}
platforms: ${{ matrix.docker-platform }}
outputs: |
type=local,dest=.
- name: Prepare artifacts
run: bash ./scripts/release/prepareArtifacts.sh
env:
BINARY: ${{ matrix.binary }}
TARGET: ${{ matrix.target }}
- uses: actions/upload-artifact@v3
name: Upload artifact
with:
name: binary-${{ matrix.target }}
path: ${{ matrix.binary }}
if-no-files-found: error
test:
strategy:
fail-fast: false
matrix:
include:
- target: x86_64-unknown-linux-gnu
host: ubuntu-20.04
- target: x86_64-unknown-linux-musl
host: ubuntu-20.04
image: clux/muslrust:stable
setup: yarn config set supportedArchitectures.libc "musl"
- target: x86_64-apple-darwin
host: macos-12
# - target: aarch64-apple-darwin
# host: ubuntu-20.04
# image: arm64v8/node
# setup: |
# sudo apt-get install binfmt-support qemu qemu-user-static
# docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
- target: x86_64-pc-windows-msvc
host: windows-2022
needs:
- build
name: Test - ${{ matrix.target }}
runs-on: ${{ matrix.host }}
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
cache: yarn
check-latest: true
- name: Setup toolchain
if: ${{ matrix.setup }}
run: ${{ matrix.setup }}
- name: Install dependencies
run: yarn install --immutable
- uses: actions/download-artifact@v3
name: Download artifacts
with:
path: artifacts
- name: Sync artifact binaries
run: node ./scripts/release/syncArtifacts.mjs
- name: List packages
run: ls -lR ./packages/cli ./packages/core-*
shell: bash
- name: Test binary
if: ${{ !matrix.image }}
run: bash ./scripts/release/testBinary.sh
env:
TARGET: ${{ matrix.target }}
- name: Test binary with Docker
if: ${{ matrix.image }}
uses: mosteo-actions/docker-run@v1
with:
image: ${{ matrix.image }}
params: -e TARGET=${{ matrix.target }}
command: bash ./scripts/release/testBinary.sh
publish:
if: ${{ github.event_name == 'workflow_dispatch' }}
name: Publish cli/core packages
runs-on: ubuntu-20.04
needs:
- test
env:
NPM_CHANNEL: latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
cache: yarn
check-latest: true
- name: Install dependencies
run: yarn install --immutable
- uses: actions/download-artifact@v3
name: Download artifacts
with:
path: artifacts
- name: Sync artifact binaries
run: node ./scripts/release/syncArtifacts.mjs
- name: List binaries
run: ls -lR ./artifacts/release ./packages/cli ./packages/core-*
shell: bash
- name: Publish npm packages
run: bash ./scripts/release/publishBinaryPackages.sh
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- uses: softprops/action-gh-release@v1
name: Create GitHub release
with:
fail_on_unmatched_files: true
files: artifacts/release/*
tag_name: ${{ env.NPM_TAG_NAME }}
prerelease: ${{ env.NPM_CHANNEL == 'next' }}
publish-npm:
if: ${{ github.event_name == 'workflow_dispatch' }}
name: Publish npm packages
runs-on: ubuntu-20.04
env:
NPM_CHANNEL: latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
cache: yarn
check-latest: true
- name: Install dependencies
run: yarn install --immutable
- name: Build packages
run: bash ./scripts/release/buildPackages.sh
- name: Publish npm packages
run: bash ./scripts/release/publishPackages.sh
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}