Skip to content

Tag and Release

Tag and Release #43

Workflow file for this run

name: Tag and Release
on:
workflow_dispatch:
inputs:
tag:
description: "current tag: The tag for this release"
required: true
default: v0.1.0-rc.2
prev_tag:
description: "previous tag: Tag from which to start calculating the changelog"
required: true
default: v0.1.0-beta.0
commit_ref:
description: "commit ref: The branch, tag or SHA of the commit to use for the release."
required: false
default: main
jobs:
tag:
name: Tag
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.commit_ref }}
- id: get_sha
run: |
echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
- uses: actions/github-script@v3
with:
github-token: ${{ secrets.MOVE2KUBE_PATOKEN }}
script: |
const tag = '${{ github.event.inputs.tag }}';
const sha = '${{ steps.get_sha.outputs.sha }}';
let tag_exists = false;
try {
const resp = await github.git.getRef({...context.repo, ref: `tags/${tag}`});
tag_exists = true;
core.info(`the tag ${tag} already exists on ${resp.data.object.type} ${resp.data.object.sha}`);
} catch(err) {
if(err.status !== 404){
throw err;
}
}
if(tag_exists) {
core.info(`deleting the tag ${tag}`);
const resp = await github.git.deleteRef({...context.repo, ref: `tags/${tag}`});
}
core.info(`creating the tag ${tag} on the commit ${sha}`);
// create the tag
github.git.createRef({
...context.repo,
ref: `refs/tags/${tag}`,
sha
});
if(!tag.endsWith('-beta.0')) {
return;
}
// create the release branch
const major_minor = /^v(\d+\.\d+)/.exec(tag);
if(!major_minor || major_minor.length !== 2){
return core.setFailed(`The tag is not a valid semantic version. tag: ${tag}`);
}
const branch_name = `release-${major_minor[1]}`;
github.git.createRef({
...context.repo,
ref: `refs/heads/${branch_name}`,
sha
});
create_release_draft:
needs: [tag]
name: Create release draft
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.commit_ref }}
fetch-depth: 0
- name: create release draft
uses: konveyor/create-release-draft@v1
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.event.inputs.tag }}
prev_tag: ${{ github.event.inputs.prev_tag }}
config: releasenotes-config.js
- name: slack notification
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_ICON: https://github.com/actions.png?size=48
SLACK_MESSAGE: "Release draft for move2kube-demos ${{ github.event.inputs.tag }} created: https://github.com/konveyor/move2kube-demos/releases"
SLACK_TITLE: Success
SLACK_USERNAME: GitHubActions
update_draft_title:
needs: [create_release_draft]
runs-on: ubuntu-latest
steps:
- uses: actions/github-script@v3
with:
github-token: ${{ secrets.MOVE2KUBE_PATOKEN }}
script: |
const tag = '${{ github.event.inputs.tag }}';
const response = await github.repos.listReleases({ ...context.repo });
const drafts = response.data.filter(release => release.draft && release.tag_name === tag);
if(drafts.length !== 1) {
return core.setFailed(`Expected to find exactly one draft release with the tag ${tag}. Found: ${drafts.length}`);
}
const draft = drafts[0];
if(!draft.name.startsWith('[WIP] ')) {
return core.setFailed(`Expected the draft name to begin with [WIP]. Found: ${draft.name}`);
}
const new_name = draft.name.replace(/^\[WIP\] /, '');
await github.repos.updateRelease({...context.repo, release_id: draft.id, name: new_name, tag_name: draft.tag_name});