Skip to content

fix(ci): sed [unreleased] in Changelog #144

fix(ci): sed [unreleased] in Changelog

fix(ci): sed [unreleased] in Changelog #144

Workflow file for this run

name: Test, Build and Deploy wasm-oidc-plugin
on:
push:
branches:
- main
env:
CARGO_TERM_COLOR: always
jobs:
cargo-deny:
runs-on: ubuntu-latest
container:
image: antonengelhardt/rust-docker-tools
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Rust version
run: rustc --version && cargo --version
- name: Cargo Deny
uses: EmbarkStudios/cargo-deny-action@v1
clippy:
runs-on: ubuntu-latest
container:
image: antonengelhardt/rust-docker-tools
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up cargo cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Rust version
run: rustc --version && cargo --version
- name: Clippy
run: cargo clippy --release --all-targets --target=wasm32-wasi -- -D warnings
fmt:
runs-on: ubuntu-latest
container:
image: antonengelhardt/rust-docker-tools
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Rust version
run: rustc --version && cargo --version
- name: Fmt
run: cargo fmt -- --check
test:
runs-on: ubuntu-latest
container:
image: antonengelhardt/rust-docker-tools
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up cargo cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Rust version
run: rustc --version && cargo --version
- name: Test
run: cargo test --workspace
build:
runs-on: ubuntu-latest
container:
image: ghcr.io/antonengelhardt/rust-docker-tools
needs: [cargo-deny, clippy, fmt, test]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up cargo cache
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Build wasm-oidc-plugin
run: |
cargo build --target wasm32-wasi --release
- name: Upload plugin as artifact
uses: actions/upload-artifact@v2
with:
name: plugin
path: target/wasm32-wasi/release/wasm_oidc_plugin.wasm
docker-image:
needs: [cargo-deny, clippy, fmt, test]
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_PASSWORD }}
- name: Pull previous image to cache
run: docker pull antonengelhardt/wasm-oidc-plugin:latest
- name: Push to Docker Hub
uses: docker/build-push-action@v2
with:
context: .
push: true
tags: antonengelhardt/wasm-oidc-plugin:latest
ghcr-image:
runs-on: ubuntu-latest
needs: [cargo-deny, clippy, fmt, test]
permissions:
contents: read
packages: write
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Login
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Push to GHCR
run: |
docker pull ghcr.io/antonengelhardt/wasm-oidc-plugin:latest # Pull the image to cache
docker build -t ghcr.io/antonengelhardt/wasm-oidc-plugin:latest .
docker push ghcr.io/antonengelhardt/wasm-oidc-plugin:latest
deploy-demo:
needs: ghcr-image
environment: demo
runs-on: ubuntu-latest
steps:
- uses: actions-hub/kubectl@master
env:
KUBE_CONFIG: ${{ secrets.KUBE_CONFIG }}
with:
args: rollout restart deployment wasm-oidc-plugin -n wasm-oidc-plugin
changelog-and-release:
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ssh-key: ${{ secrets.RELEASE_DEPLOY_KEY }}
- name: Exit if latest commit is release commit (to avoid infinite loop)
run: |
if git log -1 --pretty=%B | grep -q "chore(release): prepare for"; then
echo "Latest commit is a release commit, exiting..."
echo "EXIT=1" >> $GITHUB_ENV
exit 0
fi
- name: Get most recent merged PR and calculate the next tag
if: env.EXIT != '1'
id: get_pr
run: |
MOST_RECENTLY_MERGED_PR=$(curl -s -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/antonengelhardt/wasm-oidc-plugin/pulls?state=closed" | \
jq '[.[] | select(.merged_at != null)] | max_by(.merged_at)')
PR_NUMBER=$(echo $MOST_RECENTLY_MERGED_PR | jq -r '.number')
LABELS=$(curl -s -H 'Accept: application/vnd.github.v3+json' "https://api.github.com/repos/antonengelhardt/wasm-oidc-plugin/issues/$PR_NUMBER" | jq -r '.labels[].name')
# Set SEMVER_BUMP based on the presence of labels
if [[ $LABELS == *"major"* ]]; then
SEMVER_BUMP="major"
elif [[ $LABELS == *"minor"* ]]; then
SEMVER_BUMP="minor"
elif [[ $LABELS == *"bug"* ]]; then
SEMVER_BUMP="patch"
elif [[ $LABELS == *"patch"* ]]; then
SEMVER_BUMP="patch"
else
SEMVER_BUMP="none"
echo "EXIT=1" >> $GITHUB_ENV
exit 0 # exit if no labels are found, which means no version bump is required
fi
# Output the SEMVER_BUMP value
echo "SEMVER_BUMP is set to: $SEMVER_BUMP"
# LATEST_TAG=$(git describe --tags --abbrev=0)
LATEST_TAG=$(curl "https://api.github.com/repos/antonengelhardt/wasm-oidc-plugin/tags" | jq -r '.[0].name')
# Function to bump version numbers
bump_version() {
local IFS=.
local -a parts=($1)
case "$2" in
major)
((parts[0]++))
parts[1]=0
parts[2]=0
;;
minor)
((parts[1]++))
parts[2]=0
;;
patch)
((parts[2]++))
;;
*)
echo "Error: Unknown version bump type '$2'"
exit 1
;;
esac
echo "${parts[0]}.${parts[1]}.${parts[2]}"
}
current_version=${LATEST_TAG:1}
# Bump the version based on the SEMVER_BUMP
new_version=$(bump_version "$current_version" "$SEMVER_BUMP")
echo "VERSION=$new_version" >> $GITHUB_ENV
# Append 'v' prefix if required to maintain the same version format
NEW_TAG="v$new_version"
echo "New tag after bump is: $NEW_TAG"
echo "NEW_TAG=$NEW_TAG" >> $GITHUB_ENV
- name: Bump Version on Cargo.toml
if: env.EXIT != '1'
run: sed -i "s/^version = \".*\"/version = \"${{ env.VERSION }}\"/" Cargo.toml
- name: Git Cliff
if: env.EXIT != '1'
id: generate_changelog
uses: orhun/git-cliff-action@v3
with:
config: cliff.toml
args: -l --prepend CHANGELOG.md --strip header
env:
GITHUB_REPO: ${{ github.repository }}
- name: sed [unreleased] with new version in CHANGELOG.md
if: env.EXIT != '1'
run: sed -i "s/\[unreleased\]/[${{ env.NEW_TAG }}]/" CHANGELOG.md
- name: sed [unreleased] with new version in RELEASE_NOTES.md
if: env.EXIT != '1'
run: |
cat ${{ steps.generate_changelog.outputs.changelog }} > RELEASE_NOTES.md
sed -i "s/\[unreleased\]/[${{ env.NEW_TAG }}]/" RELEASE_NOTES.md
- name: Print Changelog
if: env.EXIT != '1'
run: cat ${{ steps.generate_changelog.outputs.changelog }} && echo "##" && cat CHANGELOG.md
- name: Commit Version and CHANGELOG.md
if: env.EXIT != '1'
run: |
git checkout origin/main
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
set +e
git add Cargo.toml CHANGELOG.md
cargo check
git add Cargo.lock
git commit -m "chore(release): prepare for ${{ env.NEW_TAG }}"
git push origin HEAD:main
- name: Create a tag on main
if: env.EXIT != '1'
run: |
git checkout origin/main
git config user.email "github-actions[bot]@users.noreply.github.com"
git config user.name "github-actions[bot]"
git tag ${{ env.NEW_TAG }}
git push origin ${{ env.NEW_TAG }}
- name: Create Release
uses: actions/create-release@v1
if: env.EXIT != '1'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.NEW_TAG }}
release_name: ${{ env.NEW_TAG }}
body_path: RELEASE_NOTES.md
draft: false
prerelease: false