Release #67
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 | |
permissions: | |
contents: write | |
on: | |
push: | |
tags: | |
# Regex for a version number such as 0.1.0 | |
- "[0-9]+.[0-9]+.[0-9]+" | |
# Regex for a prerelease such as 0.1.1rc1 | |
- '[0-9]+.[0-9]+.[0-9]+rc[0-9]+' | |
env: | |
CARGO_TERM_COLOR: always | |
jobs: | |
lint-and-test: | |
name: Lint, audit and test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Check release version | |
shell: bash | |
run: | | |
set +e | |
if ${{ env.PRERELEASE }}; then | |
exit 0 | |
fi | |
grep -q ${{ env.VERSION }} .github/ISSUE_TEMPLATE/BUG_REPORT.yaml | |
if [ $? -ne 0 ]; then | |
echo "BUG_REPORT.yaml should contain a new release version in goral_version dropdown" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} Cargo.toml | |
if [ $? -ne 0 ]; then | |
echo "Cargo.toml should contain a new release version" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} CHANGELOG.md | |
if [ $? -ne 0 ]; then | |
echo "CHANGELOG.md should contain a new release version" | |
exit 1 | |
fi | |
grep -q ${{ env.VERSION }} README.md | |
if [ $? -ne 0 ]; then | |
echo "README.md should contain a new release version in Installation section" | |
exit 1 | |
fi | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: x86_64-unknown-linux-gnu | |
- name: Check fmt | |
uses: ructions/cargo@v1 | |
with: | |
command: fmt | |
args: --all -- --check | |
- name: Run clippy | |
uses: ructions/cargo@v1 | |
with: | |
command: clippy | |
args: -- -D warnings | |
- name: Install audit | |
uses: ructions/cargo@v1 | |
with: | |
command: install | |
args: cargo-deny | |
- name: Security audit, licenses | |
uses: ructions/cargo@v1 | |
with: | |
command: deny | |
args: check licenses advisories sources | |
- name: Test | |
uses: ructions/cargo@v1 | |
with: | |
command: test | |
args: -- --nocapture | |
build-and-upload: | |
name: Build and upload | |
runs-on: ${{ matrix.os }} | |
needs: lint-and-test | |
strategy: | |
matrix: | |
include: | |
- build: linux | |
os: ubuntu-20.04 | |
target: x86_64-unknown-linux-gnu | |
- build: linux-aarch64 | |
os: ubuntu-20.04 | |
target: aarch64-unknown-linux-gnu | |
- build: windows-gnu | |
os: windows-2019 | |
target: x86_64-pc-windows-gnu | |
- build: mac-m1 | |
os: macos-14 | |
target: aarch64-apple-darwin | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install additional deps | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then | |
exit 0 | |
fi | |
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then | |
sudo apt-get install --no-install-recommends -y libc6-dev-arm64-cross gcc-aarch64-linux-gnu | |
fi | |
- name: Install target | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "x86_64-unknown-linux-gnu" ]; then | |
exit 0 | |
fi | |
rustup target add ${{ matrix.target }} | |
- name: Build | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "aarch64-unknown-linux-gnu" ]; then | |
CC=aarch64-linux-gnu-gcc RUSTFLAGS="-C target-feature=+crt-static -C linker=aarch64-linux-gnu-gcc" cargo build --verbose --release --target ${{ matrix.target }} | |
else | |
RUSTFLAGS="-C target-feature=+crt-static" cargo build --verbose --release --target ${{ matrix.target }} | |
fi | |
- name: Build archive | |
shell: bash | |
run: | | |
if [ "${{ matrix.target }}" = "x86_64-pc-windows-gnu" ]; then | |
binary_name="goral.exe" | |
else | |
binary_name="goral" | |
fi | |
dirname="$binary_name-${{ env.VERSION }}-${{ matrix.target }}" | |
mkdir "$dirname" | |
if [ "${{ matrix.target }}" = "x86_64-pc-windows-gnu" ]; then | |
certutil -hashfile "target/${{ matrix.target }}/release/$binary_name" SHA256 > sha256_checksum.txt | |
else | |
shasum -a 256 "target/${{ matrix.target }}/release/$binary_name" > sha256_checksum.txt | |
fi | |
mv "target/${{ matrix.target }}/release/$binary_name" "$dirname" | |
mv sha256_checksum.txt "$dirname" | |
tar -czf "$dirname.tar.gz" "$dirname" | |
echo "ASSET=$dirname.tar.gz" >> $GITHUB_ENV | |
- name: Save Release URL File for publish | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.ASSET }} | |
path: ${{ env.ASSET }} | |
retention-days: 1 | |
prepare-release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: build-and-upload | |
steps: | |
- name: Clone repository | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 1 | |
- name: Get the release version from the tag | |
shell: bash | |
run: | | |
set +e | |
echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
if echo "${GITHUB_REF#refs/tags/}" | grep -q "rc"; then | |
echo "PRERELEASE=true" >> $GITHUB_ENV | |
else | |
echo "PRERELEASE=false" >> $GITHUB_ENV | |
fi | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ./artifacts | |
merge-multiple: true | |
- name: Generate Changelog | |
shell: bash | |
run: | | |
if ${{ env.PRERELEASE }}; then | |
echo "This is a prerelease for testing purposes. For real usage please use the latest stable release." > ${{ env.VERSION }}-CHANGELOG.txt | |
else | |
echo "$(grep -A10000 ${{ env.VERSION }} CHANGELOG.md | grep -B10000 -m2 -P "[0-9]+\.[0-9]+\.[0-9]+" CHANGELOG.md | grep "\S" | grep -v -E "[0-9]+\.[0-9]+\.[0-9]+")" > ${{ env.VERSION }}-CHANGELOG.txt | |
fi | |
- name: Release | |
uses: softprops/action-gh-release@v1 | |
with: | |
body_path: ${{ env.VERSION }}-CHANGELOG.txt | |
prerelease: ${{ env.PRERELEASE }} | |
files: | | |
./artifacts/* |