Skip to content

Merge pull request #208 from itowlson/duplicate-routes-not-allowed #152

Merge pull request #208 from itowlson/duplicate-routes-not-allowed

Merge pull request #208 from itowlson/duplicate-routes-not-allowed #152

Workflow file for this run

name: Release
on:
push:
branches:
- main
tags:
- "v*"
paths-ignore:
- ".plugin-manifests/**"
- "*.md"
- "LICENSE"
- ".github/workflow/audits.yml"
- "supply-chain/**"
workflow_dispatch:
# Construct a concurrency group to be shared across workflow runs.
# The default behavior ensures that only one is running at a time, with
# all others queuing and thus not interrupting runs that are in-flight.
concurrency: ${{ github.workflow }}
env:
CARGO_TERM_COLOR: always
RUST_VERSION: 1.76
jobs:
build:
name: Build cloud plugin
runs-on: ${{ matrix.config.os }}
strategy:
fail-fast: false
matrix:
config:
- {
os: "ubuntu-20.04",
arch: "amd64",
wasiSDK: "linux",
extension: "",
buildArgs: "--features openssl/vendored",
target: "",
targetDir: "target/release",
}
- {
os: "ubuntu-20.04",
arch: "aarch64",
wasiSDK: "linux",
extension: "",
buildArgs: "--features openssl/vendored --target aarch64-unknown-linux-gnu",
target: "aarch64-unknown-linux-gnu",
targetDir: "target/aarch64-unknown-linux-gnu/release",
}
- {
os: "macos-13",
arch: "amd64",
wasiSDK: "macos",
extension: "",
buildArgs: "",
target: "",
targetDir: "target/release",
}
- {
os: "macos-14",
arch: "aarch64",
wasiSDK: "macos",
extension: "",
buildArgs: "",
target: "",
targetDir: "target/release",
}
- {
os: "windows-latest",
arch: "amd64",
wasiSDK: "",
extension: ".exe",
buildArgs: "",
target: "",
targetDir: "target/release",
}
steps:
# install dependencies
- name: Install latest Rust stable toolchain
run: |
rustup toolchain install ${{ env.RUST_VERSION }} --component clippy --component rustfmt --no-self-update
rustup default ${{ env.RUST_VERSION }}
- name: "Install Wasm Rust target"
run: rustup target add wasm32-wasi --toolchain ${{ env.RUST_VERSION }} && rustup target add wasm32-unknown-unknown --toolchain ${{ env.RUST_VERSION }}
- uses: Swatinem/rust-cache@v2
with:
shared-key: "${{ runner.os }}-full-${{ hashFiles('./Cargo.lock') }}"
- name: Install cross-compilation target
if: matrix.config.target != ''
shell: bash
run: rustup target add --toolchain ${{ env.RUST_VERSION }} ${{ matrix.config.target }}
- uses: actions/checkout@v4
- name: set the release version (main)
shell: bash
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV
- name: set the release version (tag)
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
- name: lowercase the runner OS name
shell: bash
run: |
OS=$(echo "${{ runner.os }}" | tr '[:upper:]' '[:lower:]')
echo "RUNNER_OS=$OS" >> $GITHUB_ENV
- name: setup for cross-compiled linux aarch64 build
if: matrix.config.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt update
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
echo '[target.aarch64-unknown-linux-gnu]' >> ${HOME}/.cargo/config.toml
echo 'linker = "aarch64-linux-gnu-gcc"' >> ${HOME}/.cargo/config.toml
echo 'rustflags = ["-Ctarget-feature=+fp16"]' >> ${HOME}/.cargo/config.toml
- name: build release
shell: bash
run: cargo build --release ${{ matrix.config.buildArgs }}
- name: Package as plugins tar
shell: bash
run: |
mkdir -v _dist
cp ${{ matrix.config.targetDir }}/cloud-plugin${{ matrix.config.extension }} _dist/cloud${{ matrix.config.extension }}
cp LICENSE _dist/cloud.license
cd _dist
tar czf cloud-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz cloud.license cloud${{ matrix.config.extension }}
- name: Upload build artifact
uses: actions/upload-artifact@v4
with:
name: cloud-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}
path: _dist/cloud-${{ env.RELEASE_VERSION }}-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz
checksums_and_manifests:
name: generate checksums and manifest
runs-on: ubuntu-latest
needs: build
steps:
- uses: actions/checkout@v4
- name: set the release version (main)
shell: bash
run: echo "RELEASE_VERSION=canary" >> $GITHUB_ENV
- name: set the release version (tag)
if: startsWith(github.ref, 'refs/tags/v')
shell: bash
run: echo "RELEASE_VERSION=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_ENV
- name: download release assets
uses: actions/download-artifact@v4
with:
pattern: cloud-*
merge-multiple: true
- name: generate checksums
run: |
ls -lh
sha256sum cloud*.tar.gz > checksums-${{ env.RELEASE_VERSION }}.txt
- uses: actions/upload-artifact@v4
with:
name: cloud-checksums
path: checksums-${{ env.RELEASE_VERSION }}.txt
- name: create plugin manifest
shell: bash
env:
REPO_OWNER: ${{ github.repository_owner }}
run: bash .plugin-manifests/generate-manifest.sh ${{ env.RELEASE_VERSION }} checksums-${{ env.RELEASE_VERSION }}.txt > cloud.json
- uses: actions/upload-artifact@v4
with:
name: cloud-plugin-manifest
path: cloud.json
create-gh-release:
name: create GitHub release
runs-on: ubuntu-latest
needs: checksums_and_manifests
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- uses: actions/checkout@v4
- name: download release assets
uses: actions/download-artifact@v4
with:
pattern: cloud-*
path: _dist
merge-multiple: true
- name: create GitHub release (canary)
if: github.ref == 'refs/heads/main'
run: |
gh release delete canary --cleanup-tag
gh release create canary _dist/* \
--title canary \
--prerelease \
--notes-file - <<- EOF
This is a "canary" release of the most recent commits on our main branch. Canary is **not stable**.
It is only intended for developers wishing to try out the latest features in cloud plugin, some of which may not be fully implemented.
EOF
- name: create GitHub release
if: startsWith(github.ref, 'refs/tags/v')
run: |
gh release create ${{ github.ref_name }} _dist/* \
--title ${{ github.ref_name }} \
--generate-notes