-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
5690afe
commit 80b1e75
Showing
2 changed files
with
272 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
name: ci | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
|
||
env: | ||
CARGO_TERM_COLOR: always | ||
|
||
jobs: | ||
|
||
ci: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v4 | ||
- uses: Swatinem/rust-cache@v2 | ||
- name: Format | ||
run: cargo fmt --check | ||
- name: Check | ||
run: cargo check | ||
- name: Clippy | ||
run: cargo clippy --all-targets --all-features -- -D warnings -D clippy::unwrap_used -D clippy::expect_used |
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,245 @@ | ||
name: release | ||
|
||
on: | ||
push: | ||
tags: | ||
- "v[0-9]+.[0-9]+.[0-9]+*" | ||
|
||
permissions: | ||
contents: write | ||
|
||
jobs: | ||
|
||
init: | ||
runs-on: ubuntu-22.04 | ||
outputs: | ||
version: ${{steps.version.outputs.version}} | ||
prerelease: ${{steps.state.outputs.prerelease}} | ||
steps: | ||
- name: Evaluate pre-release state | ||
id: state | ||
env: | ||
HEAD_REF: ${{github.head_ref}} | ||
run: | | ||
test -z "${HEAD_REF}" && (echo 'do-publish=true' >> $GITHUB_OUTPUT) | ||
if [[ "${{ github.event.ref }}" =~ ^refs/tags/v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | ||
echo release=true >> $GITHUB_OUTPUT | ||
echo release=true >> $GITHUB_ENV | ||
elif [[ "${{ github.event.ref }}" =~ ^refs/tags/v.*$ ]]; then | ||
echo prerelease=true >> $GITHUB_OUTPUT | ||
echo prerelease=true >> $GITHUB_ENV | ||
fi | ||
- name: Set version | ||
id: version | ||
run: | | ||
VERSION=$(echo "${{ github.ref }}" | sed -e 's,.*/\(.*\),\1,') | ||
[[ "${{ github.ref }}" == "refs/tags/"* ]] && VERSION=$(echo $VERSION | sed -e 's/^v//') | ||
[ "$VERSION" == "main" ] && VERSION=latest | ||
echo "version=$VERSION" >> $GITHUB_OUTPUT | ||
echo "version=$VERSION" >> $GITHUB_ENV | ||
- name: Show result | ||
run: | | ||
echo "Version: $version" | ||
echo "Release: $release" | ||
echo "Pre-release: $prerelease" | ||
# ensure that the version of the tag is the version of the crates | ||
ensure-version: | ||
runs-on: ubuntu-22.04 | ||
needs: | ||
- init | ||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
- name: Setup cargo-binstall | ||
run: | | ||
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash | ||
- name: Setup cargo-workspaces | ||
run: | | ||
cargo binstall -y cargo-workspaces | ||
- name: Set version | ||
run: | | ||
cargo ws version custom ${{ needs.init.outputs.version }} --all --no-git-commit --force "*" --yes | ||
- name: Ensure this did not change anything | ||
run: | | ||
git diff --exit-code | ||
if [ $? -gt 0 ]; then | ||
echo "::error::Uncommitted changes after setting the version. This indicates that the version of the tag does not align with the version of the crates." | ||
exit 1 | ||
fi | ||
build: | ||
name: Build | ||
runs-on: ${{ matrix.os }} | ||
needs: | ||
- init | ||
- ensure-version | ||
|
||
strategy: | ||
fail-fast: false | ||
matrix: | ||
edition: [ "", "-pm" ] | ||
target: | ||
- x86_64-unknown-linux-gnu | ||
|
||
include: | ||
- target: x86_64-unknown-linux-gnu | ||
os: ubuntu-22.04 | ||
|
||
env: | ||
# name of the binary output by the build | ||
output_binary_name: "rgold" | ||
# name of the binary available for download | ||
download_binary_name: "rgold${{ matrix.edition }}" | ||
dirname: "rgold${{ matrix.edition }}-${{ needs.init.outputs.version }}-${{ matrix.target }}" | ||
|
||
steps: | ||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
|
||
- name: Setup | Cache Cargo | ||
uses: actions/cache@v4 | ||
with: | ||
path: | | ||
~/.cargo/registry/index/ | ||
~/.cargo/registry/cache/ | ||
~/.cargo/git/db/ | ||
target/ | ||
key: "${{ matrix.target }}-release${{ matrix.edition }}-${{ hashFiles('**/Cargo.lock') }}" | ||
|
||
- name: Install dependencies | ||
if: matrix.install != '' | ||
run: ${{ matrix.install }} | ||
|
||
- name: Disable rustup self-update | ||
# workaround for: https://github.com/rust-lang/rustup/issues/3709 | ||
run: | | ||
rustup set auto-self-update disable | ||
- name: Setup Rust target | ||
run: | | ||
rustup target add ${{ matrix.target }} | ||
- name: Setup cargo-binstall | ||
run: | | ||
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash | ||
- name: Build | Build | ||
shell: bash | ||
run: | | ||
set -x | ||
CMD="cargo" | ||
# build options | ||
OPTS="--release" | ||
OPTS="$OPTS ${{ matrix.args }}" | ||
if [[ -n "${{ matrix.target }}" ]]; then | ||
OPTS="$OPTS --target=${{ matrix.target }}" | ||
fi | ||
${CMD} build ${OPTS} | ||
- name: Move binary | ||
shell: bash | ||
run: | | ||
mkdir -p "pack/$dirname" | ||
# if we have an alternate target, there is a sub-directory | ||
if [[ -f "target/release/${output_binary_name}${{ matrix.ext }}" ]]; then | ||
SRC="target/release/${output_binary_name}${{ matrix.ext }}" | ||
elif [[ -f "target/${{ matrix.target }}/release/${output_binary_name}${{ matrix.ext }}" ]]; then | ||
SRC="target/${{ matrix.target }}/release/${output_binary_name}${{ matrix.ext }}" | ||
else | ||
echo "Unable to find output" | ||
find target | ||
false # stop build | ||
fi | ||
# stage for upload | ||
mv -v "${SRC}" "pack/${dirname}/${download_binary_name}${{ matrix.ext }}" | ||
cp LICENSE "pack/${dirname}/" | ||
- run: mkdir -p upload | ||
|
||
- name: Archive (zip) | ||
if: matrix.archive == 'zip' | ||
working-directory: pack | ||
run: | | ||
7z a ../upload/${{ env.dirname }}.zip . | ||
- name: Archive (tar.gz) | ||
if: matrix.archive != 'zip' | ||
working-directory: pack | ||
run: | | ||
tar czvf ../upload/${{ env.dirname }}.tar.gz . | ||
- name: Upload binary | ||
uses: actions/upload-artifact@v4 | ||
with: | ||
name: rgold${{ matrix.edition }}-${{ matrix.target }} | ||
path: upload/* | ||
if-no-files-found: error | ||
|
||
publish: | ||
needs: [ init, build ] | ||
runs-on: ubuntu-22.04 | ||
|
||
permissions: | ||
contents: write | ||
packages: write | ||
id-token: write | ||
attestations: write | ||
|
||
steps: | ||
|
||
- name: Checkout | ||
uses: actions/checkout@v4 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- name: Install convco | ||
run: | | ||
curl -sLO https://github.com/convco/convco/releases/download/v0.5.1/convco-ubuntu.zip | ||
unzip convco-ubuntu.zip | ||
sudo install convco /usr/local/bin | ||
- name: Generate changelog | ||
run: | | ||
convco changelog -s --max-majors=1 --max-minors=1 --max-patches=1 -n > /tmp/changelog.md | ||
- uses: actions/download-artifact@v4 | ||
with: | ||
path: ${{ github.workspace }}/download | ||
|
||
- name: Display downloaded content | ||
run: ls -R ${{ github.workspace }}/download | ||
|
||
- name: Stage release | ||
run: | | ||
mkdir -p staging | ||
cp -pv ${{ github.workspace }}/download/*/* staging/ | ||
- name: Display staging area | ||
run: ls -R staging | ||
|
||
- uses: actions/attest-build-provenance@v1 | ||
with: | ||
subject-path: 'staging/*' | ||
|
||
# Final step, create the GitHub release, attaching the files | ||
- name: Create Release | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
TAG: v${{ needs.init.outputs.version }} | ||
run: | | ||
OPTS="" | ||
if [[ "${{ needs.init.outputs.prerelease }}" == "true" ]]; then | ||
OPTS="${OPTS} -p" | ||
fi | ||
gh release create ${OPTS} --title "${{ needs.init.outputs.version }}" -F /tmp/changelog.md ${TAG} \ | ||
$(find staging -type f) |