Release #11
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: Release | |
on: | |
push: | |
tags: | |
- 'v*.*.*' | |
workflow_dispatch: | |
env: | |
cache_nonce: 0 # Allows for easily busting actions/cache caches | |
nim_version: pinned | |
rust_version: 1.78.0 | |
binary_base: codex | |
build_dir: build | |
nim_flags: '-d:verify_circuit=true' | |
windows_libs: 'libstdc++-6.dll libgomp-1.dll libgcc_s_seh-1.dll libwinpthread-1.dll' | |
jobs: | |
# Matrix | |
matrix: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.matrix.outputs.matrix }} | |
steps: | |
- name: Compute matrix | |
id: matrix | |
uses: fabiocaccamo/create-matrix-action@v4 | |
with: | |
matrix: | | |
os {linux}, cpu {amd64}, builder {ubuntu-22.04}, nim_version {${{ env.nim_version }}}, rust_version {${{ env.rust_version }}}, shell {bash --noprofile --norc -e -o pipefail} | |
os {linux}, cpu {arm64}, builder {buildjet-4vcpu-ubuntu-2204-arm}, nim_version {${{ env.nim_version }}}, rust_version {${{ env.rust_version }}}, shell {bash --noprofile --norc -e -o pipefail} | |
os {macos}, cpu {amd64}, builder {macos-13}, nim_version {${{ env.nim_version }}}, rust_version {${{ env.rust_version }}}, shell {bash --noprofile --norc -e -o pipefail} | |
os {macos}, cpu {arm64}, builder {macos-14}, nim_version {${{ env.nim_version }}}, rust_version {${{ env.rust_version }}}, shell {bash --noprofile --norc -e -o pipefail} | |
os {windows}, cpu {amd64}, builder {windows-latest}, nim_version {${{ env.nim_version }}}, rust_version {${{ env.rust_version }}}, shell {msys2} | |
# Build | |
build: | |
needs: matrix | |
strategy: | |
fail-fast: false | |
matrix: | |
include: ${{fromJson(needs.matrix.outputs.matrix)}} | |
defaults: | |
run: | |
shell: ${{ matrix.shell }} {0} | |
name: ${{ matrix.os }}-${{ matrix.cpu }}-${{ matrix.nim_version }} | |
runs-on: ${{ matrix.builder }} | |
timeout-minutes: 80 | |
steps: | |
- name: Release - Checkout sources | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Release - Setup Nimbus Build System | |
uses: ./.github/actions/nimbus-build-system | |
with: | |
os: ${{ matrix.os }} | |
cpu: ${{ matrix.cpu }} | |
shell: ${{ matrix.shell }} | |
nim_version: ${{ matrix.nim_version }} | |
rust_version: ${{ matrix.rust_version }} | |
- name: Release - Compute binary name | |
run: | | |
case ${{ matrix.os }} in | |
linux*) os_name="linux" ;; | |
macos*) os_name="darwin" ;; | |
windows*) os_name="windows" ;; | |
esac | |
binary="${{ env.binary_base }}-${{ github.ref_name }}-${os_name}-${{ matrix.cpu }}" | |
[[ ${os_name} == "windows" ]] && binary="${binary}.exe" | |
echo "binary=${binary}" >>$GITHUB_ENV | |
- name: Release - Build | |
run: | | |
make NIMFLAGS="--out:${{ env.build_dir }}/${{ env.binary }} ${{ env.nim_flags }}" | |
- name: Release - Libraries | |
run: | | |
if [[ "${{ matrix.os }}" == "windows" ]]; then | |
for lib in ${{ env.windows_libs }}; do | |
cp -v "${MINGW_PREFIX}/bin/${lib}" "${{ env.build_dir }}" | |
done | |
fi | |
- name: Release - Upload build artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: release-${{ env.binary }} | |
path: ${{ env.build_dir }}/ | |
retention-days: 1 | |
# Release | |
release: | |
runs-on: ubuntu-latest | |
needs: build | |
if: success() || failure() | |
steps: | |
- name: Release - Download binaries | |
uses: actions/download-artifact@v4 | |
with: | |
pattern: release* | |
merge-multiple: true | |
path: /tmp/release | |
- name: Release - Compress and checksum | |
run: | | |
cd /tmp/release | |
checksum() { | |
arc="${1}" | |
sha256sum "${arc}" >"${arc}.sha256" | |
} | |
# Compress and prepare | |
for file in *; do | |
# Exclude libraries | |
if [[ "${file}" != *".dll"* ]]; then | |
if [[ "${file}" == *".exe"* ]]; then | |
# Windows - binary only | |
arc="${file%.*}.zip" | |
zip "${arc}" "${file}" | |
checksum "${arc}" | |
# Windows - binary and libs | |
arc="${file%.*}-libs.zip" | |
zip "${arc}" "${file}" ${{ env.windows_libs }} | |
rm -f "${file}" ${{ env.windows_libs }} | |
checksum "${arc}" | |
else | |
# Linux/macOS | |
arc="${file}.tar.gz" | |
chmod 755 "${file}" | |
tar cfz "${arc}" "${file}" | |
rm -f "${file}" | |
checksum "${arc}" | |
fi | |
fi | |
done | |
- name: Release - Upload compressed artifacts and checksums | |
uses: actions/upload-artifact@v4 | |
with: | |
name: archives-and-checksums | |
path: /tmp/release/ | |
retention-days: 1 | |
- name: Release | |
uses: softprops/action-gh-release@v2 | |
if: startsWith(github.ref, 'refs/tags/') | |
with: | |
files: | | |
/tmp/release/* | |
make_latest: true |