Files
wownero/.github/workflows/release.yml
T
jwinterm ea85e4a00e ci: add GitHub Actions release workflow for cross-platform builds
Cross-builds release binaries via contrib/depends for the established
target set (x86_64/i686/aarch64/arm/riscv64 linux, x86_64/i686 windows,
x86_64/arm64 macos), packaging them as wownero-<triplet>-<version>.{tar.bz2,zip}
with SHA256SUMS to match prior releases. Publishes/attaches to the GitHub
Release on v* tags, or via manual dispatch (publish=true) to add binaries
to an already-tagged release. Runs on the GitHub mirror's hosted runners.
2026-06-09 18:02:12 -04:00

199 lines
7.3 KiB
YAML

name: release
# Cross-builds Wownero release binaries via contrib/depends and attaches them to
# a GitHub Release. Asset names match the established convention from past releases:
# wownero-<host-triplet>-<version>.{tar.bz2,zip}
#
# Runs on the GitHub mirror's hosted runners. Triggers:
# * pushing a version tag (v*) -> builds + publishes a Release for that tag
# * manual dispatch (workflow_dispatch):
# - ref: tag/branch/commit to build (e.g. v0.11.4.0); blank = default branch
# - publish: if true, attach the built assets to the Release for `ref`
# (use this to add binaries to an already-tagged release)
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
ref:
description: 'Tag/branch/commit to build (e.g. v0.11.4.0)'
required: false
default: ''
publish:
description: 'Attach assets to the GitHub Release for the built tag'
type: boolean
required: false
default: false
env:
APT_SET_CONF: |
tee -a /etc/apt/apt.conf.d/80-custom << EOF
Acquire::Retries "3";
Acquire::http::Timeout "120";
Acquire::ftp::Timeout "120";
EOF
CCACHE_SETTINGS: |
ccache --max-size=150M
ccache --set-config=compression=true
jobs:
build-cross:
runs-on: ubuntu-latest
container:
image: ubuntu:20.04
env:
DEBIAN_FRONTEND: noninteractive
CCACHE_TEMPDIR: /tmp/.ccache-temp
strategy:
fail-fast: false
matrix:
toolchain:
- name: "x86_64-linux-gnu"
host: "x86_64-unknown-linux-gnu"
packages: "gperf cmake python3-zmq libdbus-1-dev libharfbuzz-dev"
archive: "tar.bz2"
- name: "aarch64-linux-gnu"
host: "aarch64-linux-gnu"
packages: "python3 gperf g++-aarch64-linux-gnu"
archive: "tar.bz2"
- name: "arm-linux-gnueabihf"
host: "arm-linux-gnueabihf"
packages: "python3 gperf g++-arm-linux-gnueabihf"
archive: "tar.bz2"
- name: "riscv64-linux-gnu"
host: "riscv64-linux-gnu"
packages: "python3 gperf g++-riscv64-linux-gnu"
archive: "tar.bz2"
- name: "i686-linux-gnu"
host: "i686-pc-linux-gnu"
packages: "gperf cmake g++-multilib python3-zmq"
archive: "tar.bz2"
- name: "x86_64-w64-mingw32"
host: "x86_64-w64-mingw32"
packages: "cmake python3 g++-mingw-w64-x86-64"
archive: "zip"
- name: "i686-w64-mingw32"
host: "i686-w64-mingw32"
packages: "python3 g++-mingw-w64-i686"
archive: "zip"
- name: "x86_64-apple-darwin11"
host: "x86_64-apple-darwin11"
packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python3-dev python3-setuptools-git libtinfo5"
archive: "tar.bz2"
- name: "aarch64-apple-darwin11"
host: "aarch64-apple-darwin11"
packages: "cmake imagemagick libcap-dev librsvg2-bin libz-dev libbz2-dev libtiff-tools python3-dev python3-setuptools-git libtinfo5"
archive: "tar.bz2"
name: ${{ matrix.toolchain.name }}
steps:
- name: set apt conf
run: ${{ env.APT_SET_CONF }}
- name: install dependencies
run: |
apt update
apt -y install build-essential libtool cmake autotools-dev automake \
pkg-config python3 gperf bsdmainutils curl git ca-certificates unzip \
zip bzip2 ccache ${{ matrix.toolchain.packages }}
- name: configure git
run: git config --global --add safe.directory '*'
- uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.ref }}
fetch-depth: 0
submodules: recursive
- name: ccache
uses: actions/cache@v4
with:
path: ~/.ccache
key: ccache-${{ matrix.toolchain.host }}-${{ github.sha }}
restore-keys: ccache-${{ matrix.toolchain.host }}-
- name: depends cache
uses: actions/cache@v4
with:
path: contrib/depends/built
key: depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }}
restore-keys: |
depends-${{ matrix.toolchain.host }}-${{ hashFiles('contrib/depends/packages/*') }}
depends-${{ matrix.toolchain.host }}-
- name: macOS SDK cache
uses: actions/cache@v4
with:
path: contrib/depends/sdk-sources
key: sdk-${{ matrix.toolchain.host }}
restore-keys: sdk-${{ matrix.toolchain.host }}
- name: prepare mingw32
if: ${{ matrix.toolchain.host == 'x86_64-w64-mingw32' || matrix.toolchain.host == 'i686-w64-mingw32' }}
run: |
update-alternatives --set ${{ matrix.toolchain.host }}-g++ $(which ${{ matrix.toolchain.host }}-g++-posix)
update-alternatives --set ${{ matrix.toolchain.host }}-gcc $(which ${{ matrix.toolchain.host }}-gcc-posix)
- name: build
run: |
${{ env.CCACHE_SETTINGS }}
make depends target=${{ matrix.toolchain.host }} -j$(nproc)
- name: determine version
id: version
run: |
if [ "${{ github.ref_type }}" = "tag" ]; then
VERSION="${{ github.ref_name }}"
elif [ -n "${{ github.event.inputs.ref }}" ]; then
VERSION="${{ github.event.inputs.ref }}"
else
VERSION="$(git describe --tags --always)"
fi
echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
- name: package
run: |
VERSION="${{ steps.version.outputs.version }}"
DIST="wownero-${{ matrix.toolchain.name }}-${VERSION}"
BIN="build/${{ matrix.toolchain.host }}/release/bin"
mkdir -p "dist/${DIST}"
cp "${BIN}"/wownero* "dist/${DIST}/" 2>/dev/null || true
cp LICENSE README.md "dist/${DIST}/" 2>/dev/null || true
( cd dist
if [ "${{ matrix.toolchain.archive }}" = "zip" ]; then
zip -r9 "${DIST}.zip" "${DIST}"
else
tar -cjf "${DIST}.tar.bz2" "${DIST}"
fi )
- uses: actions/upload-artifact@v4
with:
name: wownero-${{ matrix.toolchain.name }}
path: |
dist/*.zip
dist/*.tar.bz2
if-no-files-found: error
publish:
needs: build-cross
runs-on: ubuntu-latest
if: ${{ github.ref_type == 'tag' || github.event.inputs.publish == 'true' }}
permissions:
contents: write
steps:
- name: download artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
merge-multiple: true
- name: resolve tag + checksums
id: meta
run: |
if [ "${{ github.ref_type }}" = "tag" ]; then
TAG="${{ github.ref_name }}"
else
TAG="${{ github.event.inputs.ref }}"
fi
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"
cd artifacts
sha256sum *.zip *.tar.bz2 2>/dev/null | tee SHA256SUMS.txt
- name: publish release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.meta.outputs.tag }}
files: |
artifacts/*.zip
artifacts/*.tar.bz2
artifacts/SHA256SUMS.txt
fail_on_unmatched_files: true