Skip to content

Release - Preview

Release - Preview #34

name: Release - Preview
on:
workflow_dispatch:
inputs:
branch_tag:
description: "Branch:Tag:Milestone:PreviousTag, ex: v1.6.x:v1.6.0-rc1:v1.6.0:v1.5.0"
required: true
defaults:
run:
shell: bash
env:
CARGO_TERM_COLOR: always
jobs:
release:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GH_ACTION_TOKEN }}
permissions:
contents: write
pull-requests: write
steps:
- name: Setup Git
run: |
gh auth setup-git
- uses: anchore/sbom-action/[email protected]
- run: |
git config --global user.email "[email protected]"
git config --global user.name "David Ko"
- uses: actions/checkout@v4
- uses: actions/checkout@v4
with:
repository: innobead/renote
ref: main
path: renote
- run: cargo install --path ./renote
- id: var
name: Get branch, tag, milestone
run: |
IFS=':' read -ra tokens <<< "${{ inputs.branch_tag }}"
branch="${tokens[0]}"
tag="${tokens[1]}"
milestone="${tokens[2]}"
prev_tag="${tokens[3]:-}"
if [ -z "${tokens[0]}" || -z "${tokens[1]}" || -z "${tokens[2]}" ]; then
echo "Branch, Tag or Milestone is empty"
exit 1
fi
echo "branch=${branch}" >> $GITHUB_OUTPUT
echo "tag=${tag}" >> $GITHUB_OUTPUT
echo "milestone=${milestone}" >> $GITHUB_OUTPUT
echo "prev_tag=${prev_tag}" >> $GITHUB_OUTPUT
cat <<EOF
branch=${branch}
tag=${tag}
milestone=${milestone}
prev_tag=${prev_tag}
EOF
- id: pr
name: Create a release PR (for updating the version file)
run: |
common_args=(
--owner longhorn
--repo longhorn
--branch "${{ steps.var.outputs.branch }}"
--tag "${{ steps.var.outputs.tag }}"
--longhorn-chart-repo charts
--longhorn-repos longhorn-manager
--longhorn-repos longhorn-engine
--longhorn-repos longhorn-instance-manager
--longhorn-repos longhorn-share-manager
--longhorn-repos backing-image-manager
--longhorn-repos longhorn-ui
--merge
)
if [ "${{ steps.var.outputs.branch }}" != "v1.6.x" ]; then
common_args+=(--longhorn-repos cli:longhorn-cli)
fi
renote pr "${common_args[@]}"
- id: artifact
name: Collect artifacts
run: |
./scripts/collect-artifacts.sh longhorn charts
- id: tag
name: Create a tag for each release repo
run: |
common_args=(
--owner longhorn
--branch "${{ steps.var.outputs.branch }}"
--tag "${{ steps.var.outputs.tag }}"
--create-version-file
--version-file-repos longhorn-manager
--version-file-repos longhorn-engine
--version-file-repos longhorn-instance-manager
--version-file-repos longhorn-share-manager
--version-file-repos backing-image-manager
--version-file-repos longhorn-ui
--repos longhorn
--force
)
if [ "${{ steps.var.outputs.branch }}" != "v1.6.x" ]; then
common_args+=(--version-file-repos cli)
fi
renote tag "${common_args[@]}"
- id: changelog-prev-tag
name: Create a changelog from the most previous tag
run: |
repos=(
longhorn-manager
longhorn-engine
longhorn-instance-manager
longhorn-share-manager
backing-image-manager
longhorn-ui
longhorn
)
if [ "${{ steps.var.outputs.branch }}" != "v1.6.x" ]; then
repos+=(cli)
fi
output=$(renote changelog \
--owner longhorn \
--branch ${{ steps.var.outputs.branch }} \
--tag ${{ steps.var.outputs.tag }} \
$(printf -- '--repos %s ' "${repos[@]}"))
echo "$output"
echo "$output" > ./changelog-prev-tag.md
- id: changelog
name: Create a changelog from the last release
run: |
repos=(
longhorn-manager
longhorn-engine
longhorn-instance-manager
longhorn-share-manager
backing-image-manager
longhorn-ui
longhorn
)
if [ "${{ steps.var.outputs.branch }}" != "v1.6.x" ]; then
repos+=(cli)
fi
output=$(renote changelog \
--log-level error \
--owner longhorn \
--branch "${{ steps.var.outputs.branch }}" \
--tag "${{ steps.var.outputs.tag }}" \
--prev-tag "${{ steps.var.outputs.prev_tag }}" \
$(printf -- '--repos %s ' "${repos[@]}"))
echo "$output"
echo "$output" > ./changelog.md
- id: release
name: Create a release
run: |
common_args=(
--owner longhorn
--repo longhorn
--branch ${{ steps.var.outputs.branch }}
--tag ${{ steps.var.outputs.tag }}
--milestone ${{ steps.var.outputs.milestone }}
--pre-note ./assets/release-preview/pre-note.md
--note-contributors innobead
--since-days 365
--exclude-labels "kind/test"
--exclude-labels "area/infra"
--exclude-labels "area/ci"
--exclude-labels "area/qa"
--exclude-labels "wontfix"
--exclude-labels "duplicated"
--exclude-labels "invalid"
--exclude-labels "release/task"
--note-section-labels "highlight"
--note-section-labels "kind/feature"
--note-section-labels "kind/improvement"
--note-section-labels "kind/bug"
--note-section-labels "area/performance"
--note-section-labels "area/resilience"
--note-section-labels "area/stability"
--note-section-labels "area/scalability"
--note-section-labels "area/benchmark"
--pre-hook ./scripts/check-images-ready.sh
--pre-hook-args "longhornio/longhorn-manager:${{ steps.var.outputs.tag }}"
--pre-hook-args "longhornio/longhorn-engine:${{ steps.var.outputs.tag }}"
--pre-hook-args "longhornio/longhorn-instance-manager:${{ steps.var.outputs.tag }}"
--pre-hook-args "longhornio/longhorn-share-manager:${{ steps.var.outputs.tag }}"
--pre-hook-args "longhornio/backing-image-manager:${{ steps.var.outputs.tag }}"
--pre-hook-args "longhornio/longhorn-ui:${{ steps.var.outputs.tag }}"
--artifacts ./longhorn.yaml
--artifacts ./longhorn-images.txt
--artifacts ./charts.tar.gz
--artifacts ./changelog.md
--artifacts ./changelog-prev-tag.md
--artifacts ./longhorn-images-sbom.tar.gz
--pre-release
--draft
)
if [ "${{ steps.var.outputs.branch }}" != "v1.6.x" ]; then
common_args+=(--pre-hook-args "longhornio/longhorn-cli:${{ steps.var.outputs.tag }}")
fi
renote release "${common_args[@]}"