Skip to content

ci: Add nightly releases. #1452

ci: Add nightly releases.

ci: Add nightly releases. #1452

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-*
# Every day at midnight (nightly)
schedule:
- cron: '0 0 * * *'
# Uncomment to test in PRs (its safe)
pull_request:
permissions:
contents: write
id-token: write
jobs:
plan:
name: Plan release
runs-on: ubuntu-latest
outputs:
publish: ${{ github.event_name == 'workflow_dispatch' || github.event_name == 'schedule' }}
nightly:
${{ github.event_name == 'schedule' || contains(github.head_ref, 'develop-') ||
github.event_name == 'pull_request' }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- run: bash ./scripts/release/planRelease.sh
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
needs:
- plan
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
- name: Setup toolchain
if: ${{ matrix.setup }}
run: ${{ matrix.setup }}
- 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:
name: Publish cli/core packages
runs-on: ubuntu-20.04
needs:
- plan
- test
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
- # if: ${{ needs.plan.outputs.publish == 'true' }}
name: Publish npm packages
run: bash ./scripts/release/publishBinaryPackages.sh
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
- if: ${{ needs.plan.outputs.publish == 'true' && needs.plan.outputs.nightly == 'false' }}
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 != 'latest' }}
publish-npm:
if: ${{ needs.plan.outputs.publish == 'true' && needs.plan.outputs.nightly == 'false' }}
needs:
- plan
name: Publish npm packages
runs-on: ubuntu-20.04
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 }}