-
Notifications
You must be signed in to change notification settings - Fork 5
144 lines (137 loc) · 5.35 KB
/
release.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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:
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.commit_ref }}
submodules: true
- name: test
run: VERSION='${{ github.event.inputs.tag }}' make test-docker
- run: echo "${{ secrets.QUAY_BOT_PASSWORD }}" | docker login --username "${{ secrets.QUAY_BOT_USERNAME }}" --password-stdin quay.io
- name: push image to cache
run: docker push quay.io/konveyor/move2kube-tests:${{ github.event.inputs.tag }}
- if: failure()
uses: rtCamp/action-slack-notify@v2
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
SLACK_COLOR: "#BD3232"
SLACK_ICON: https://github.com/actions.png?size=48
SLACK_MESSAGE: "Test failed in move2kube-tests for branch ${{ github.event.inputs.commit_ref }}"
SLACK_TITLE: Failed
SLACK_USERNAME: GitHubActions
tag:
needs: [test]
name: Tag
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.event.inputs.commit_ref }}
submodules: true
- 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}`);
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]}`;
core.info(`New beta.0 release. Creating new branch for ${branch_name}`);
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 }}
submodules: true
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-tests ${{ steps.only_tag.outputs.tag }} created: https://github.com/konveyor/move2kube-tests/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});