Skip to content

Release

Release #27

Workflow file for this run

name: Release
on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
build-binary:
description: 'Build Binary'
required: false
type: boolean
default: true
draft-release:
description: 'Draft Release'
required: false
type: boolean
default: false
jobs:
#
# extract-version extracts the version from the tag or the branch name,
# for reuse in later jobs
#
extract-version:
name: Extract version
runs-on: warp-ubuntu-latest-x64-16x
outputs:
VERSION: ${{ steps.extract_version.outputs.VERSION }}
steps:
- name: Extract version
id: extract_version
run: |
if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then
VERSION="${GITHUB_REF#refs/tags/}"
else
SHA_SHORT="$(echo ${GITHUB_SHA} | cut -c1-7)"
BRANCH_NAME_SAFE="${GITHUB_REF_NAME//\//-}" # replaces "/" in branch name with "-"
VERSION="${BRANCH_NAME_SAFE}-${SHA_SHORT}"
fi
echo "VERSION=${VERSION}" >> $GITHUB_OUTPUT
echo "${VERSION}"
echo "### Version: \`${VERSION}\`" >> $GITHUB_STEP_SUMMARY
echo "| | |" >> $GITHUB_STEP_SUMMARY
echo "| ------------------- | ---------------------- |" >> $GITHUB_STEP_SUMMARY
echo "| \`GITHUB_REF_TYPE\` | \`${GITHUB_REF_TYPE}\` |" >> $GITHUB_STEP_SUMMARY
echo "| \`GITHUB_REF_NAME\` | \`${GITHUB_REF_NAME}\` |" >> $GITHUB_STEP_SUMMARY
echo "| \`GITHUB_REF\` | \`${GITHUB_REF}\` |" >> $GITHUB_STEP_SUMMARY
echo "| \`GITHUB_SHA\` | \`${GITHUB_SHA}\` |" >> $GITHUB_STEP_SUMMARY
echo "| \`VERSION\` | \`${VERSION}\` |" >> $GITHUB_STEP_SUMMARY
#
# build-binary builds a release binary for a variety of platforms
#
build-binary:
name: Build binary
needs: extract-version
if: ${{ github.event.inputs.build-binary == 'true' || github.event_name == 'push'}} # when manually triggered or version tagged
runs-on: ${{ matrix.configs.runner }}
env:
VERSION: ${{ needs.extract-version.outputs.VERSION }}
permissions:
contents: write
packages: write
strategy:
matrix:
configs:
- target: x86_64-unknown-linux-musl
runner: warp-ubuntu-latest-x64-16x
# - target: x86_64-unknown-linux-gnu
# runner: warp-ubuntu-latest-x64-16x
# - target: aarch64-apple-darwin
# runner: warp-macos-14-arm64-6x
steps:
- name: Checkout sources
uses: actions/checkout@v4
# # https://github.com/dtolnay/rust-toolchain
# - name: Setup rust toolchain
# uses: dtolnay/rust-toolchain@stable
# with:
# target: ${{ matrix.configs.target }}
# - name: Install Protoc
# uses: arduino/setup-protoc@v3
# - name: Install musl-tools
# run: |
# sudo apt-get update
# sudo apt-get install -y musl-tools
# # https://github.com/WarpBuilds/rust-cache
# - name: Run WarpBuilds/rust-cache
# uses: WarpBuilds/rust-cache@v2
# with:
# cache-on-failure: true
# # https://github.com/Mozilla-Actions/sccache-action
# - name: Setup sccache-action
# uses: mozilla-actions/[email protected]
# - name: Configure sccache
# run: |
# echo "SCCACHE_GHA_ENABLED=true" >> $GITHUB_ENV
# echo "RUSTC_WRAPPER=sccache" >> $GITHUB_ENV
- name: Prepare output filename
run: |
OUTPUT_FILENAME="rbuilder-${VERSION}-${{ matrix.configs.target }}.tar.gz"
echo "OUTPUT_FILENAME=$OUTPUT_FILENAME" >> $GITHUB_ENV
echo "Filename: ${OUTPUT_FILENAME}"
- name: Install cross
run: cargo install cross
- name: Build binary
run: cross build --release --target ${{ matrix.configs.target }}
# - name: Build rbuilder binary
# run: |
# # rustup show
# # rustup component add rust-src # needed for stdlib source
# # rustc --version
# # cargo --version
# # RUSTFLAGS="-C target-feature=+crt-static" cargo build --target ${{ matrix.configs.target }} --release -Z build-std --verbose
# cargo build --release --target x86_64-unknown-linux-musl --verbose
# - name: Build binary
# run: |
# docker run --rm \
# --volume ${{ github.workspace }}:/volume \
# clux/muslrust:stable \
# sh -c 'apt-get update \
# && apt-get install -y clang libclang-dev \
# && cargo build --release --target ${{ matrix.configs.target }}'
# # docker run --rm --tty \
# # --volume "$HOME/.cargo/registry/:/root/.cargo/registry" \
# # --volume "$(pwd):/volume" \
# # clux/muslrust:stable \
# # sh -c 'apt-get update && \
# # apt-get install -y pkg-config libssl-dev && \
# # cargo build --release --target ${{ matrix.configs.target }} --verbose'
# # docker run --rm \
# # --volume ${{ github.workspace }}:/volume \
# # --volume ~/.cargo/registry:/root/.cargo/registry \
# # --volume ~/.cargo/git:/root/.cargo/git \
# # --volume ~/.cargo/bin:/root/.cargo/bin \
# # --env SCCACHE_GHA_ENABLED=true \
# # --env RUSTC_WRAPPER=/usr/local/bin/sccache \
# # --env SCCACHE_DIR=/volume/target/sccache \
# # clux/muslrust:stable \
# # sh -c 'apt-get update \
# # && apt-get install -y clang libclang-dev \
# # && cargo build --release --target ${{ matrix.configs.target }}'
# # docker run --rm \
# # --volume $(pwd):/volume \
# # -e CC=x86_64-linux-musl-gcc \
# # clux/muslrust:stable \
# # sh -c 'apt-get update && \
# # apt-get install -y clang libclang-dev && \
# # rustup target add x86_64-unknown-linux-musl && \
# # cargo build --release --target x86_64-unknown-linux-musl'
- name: Prepare artifacts
run: |
mkdir -p artifacts
tar -czf "artifacts/${OUTPUT_FILENAME}" -C target/${{ matrix.configs.target }}/release rbuilder
# https://github.com/actions/upload-artifact
- name: Upload artifacts
uses: actions/[email protected]
with:
name: ${{ env.OUTPUT_FILENAME }}
path: artifacts/${{ env.OUTPUT_FILENAME }}
#
# draft-release runs after building for various targets, collects artifacts and prepares a draft release
# (only when running against a tag!)
#
draft-release:
name: Draft release
if: ${{ github.event.inputs.draft-release == 'true' || github.event_name == 'push'}} # when manually triggered or version tagged
needs: [extract-version, build-binary]
runs-on: warp-ubuntu-latest-x64-16x
env:
VERSION: ${{ needs.extract-version.outputs.VERSION }}
permissions:
contents: write
steps:
- name: Checkout
uses: actions/checkout@v4
# https://github.com/actions/download-artifact
- name: Download artifacts
uses: actions/download-artifact@v4
with:
merge-multiple: true
path: artifacts
- name: Record artifacts checksums
working-directory: artifacts
run: |
find ./ || true
for file in *; do sha256sum "$file" >> sha256sums.txt; done;
cat sha256sums.txt
# https://github.com/softprops/action-gh-release
- name: Create release draft
uses: softprops/[email protected]
id: create-release-draft
with:
draft: true
files: artifacts/*
generate_release_notes: true
name: ${{ env.VERSION }}
tag_name: ${{ env.VERSION }}
- name: Write Github Step Summary
run: |
echo "---"
echo "### Release Draft: ${{ env.VERSION }}" >> $GITHUB_STEP_SUMMARY
echo "${{ steps.create-release-draft.outputs.url }}" >> $GITHUB_STEP_SUMMARY