Commit 5b095556 authored by tom goriunov's avatar tom goriunov Committed by GitHub

[skip ci] Pre-release workflow (#1026)

* create workflow

* add pre-release tag for issues

* [skip ci] remove pre-release label on release

* [skip ci] error message tweak
parent b06bc511
name: Checks
on:
workflow_call:
workflow_dispatch:
pull_request:
types: [ opened, synchronize, unlabeled ]
......@@ -11,17 +12,6 @@ on:
- 'docs/**'
- 'public/**'
- 'stub/**'
push:
branches:
- main
paths-ignore:
- '.github/ISSUE_TEMPLATE/**'
- '.husky/**'
- '.vscode/**'
- 'deploy/**'
- 'docs/**'
- 'public/**'
- 'stub/**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
......
name: Run E2E tests k8s
on:
push:
tags:
- '*'
workflow_dispatch:
workflow_call:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
push_to_registry:
......
name: Label released issues
name: Label issues in release
on:
workflow_dispatch:
inputs:
inputs:
tag:
description: 'Release tag'
required: true
type: string
label_name:
description: 'Name of the label'
required: true
type: string
label_description:
description: 'Description of the label'
default: ''
required: false
type: string
label_color:
description: 'A color of the added label'
default: 'FFFFFF'
required: false
type: string
workflow_call:
inputs:
inputs:
tag:
description: 'Release tag'
required: true
type: string
label_name:
description: 'Name of the label'
required: true
type: string
label_description:
description: 'Description of the label'
default: ''
required: false
type: string
label_color:
description: 'A color of the added label'
default: 'FFFFFF'
......@@ -21,7 +47,7 @@ on:
value: ${{ jobs.run.outputs.issues }}
concurrency:
group: Label released issues
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
......@@ -34,6 +60,8 @@ jobs:
- name: Getting tags of the two latestest releases
id: tags
uses: actions/github-script@v6
env:
TAG: ${{ inputs.tag }}
with:
script: |
const { repository: { releases: { nodes: releases } } } = await github.graphql(`
......@@ -60,8 +88,15 @@ jobs:
}
);
const [ { tagName: latestTag }, { tagName: previousTag } ] = releases
.filter(({ isPrerelease, isDraft }) => !isPrerelease && !isDraft);
if (releases[0].tagName !== process.env.TAG) {
core.setFailed(`Release with tag ${ process.env.TAG } is not latest one.`);
return;
}
const latestTag = process.env.TAG;
const [ { tagName: previousTag } ] = releases
.slice(1)
.filter(({ isDraft }) => !isDraft);
core.info('Found following tags:');
core.info(` latest: ${ latestTag }`);
......@@ -70,59 +105,9 @@ jobs:
core.setOutput('latest', latestTag);
core.setOutput('previous', previousTag);
- name: Getting info about latest release label
id: label
uses: actions/github-script@v6
env:
LABEL_NAME: ${{ steps.tags.outputs.latest }}
with:
script: |
try {
const result = await github.request('GET /repos/{owner}/{repo}/labels/{name}', {
owner: context.repo.owner,
repo: context.repo.repo,
name: process.env.LABEL_NAME,
});
core.info(`Found label with id: ${ result.data.id }`);
core.setOutput('id', result.data.id);
} catch (error) {
if (error.status === 404) {
core.info('Nothing has found.');
core.setOutput('id', 'null');
}
}
- name: Fetching issues with release label
id: has_labeled_issues
uses: actions/github-script@v6
env:
LABEL_NAME: ${{ steps.tags.outputs.latest }}
LABEL_ID: ${{ steps.label.outputs.id }}
with:
script: |
if (process.env.LABEL_ID === 'null') {
core.info(`Label does not exist. No need to fetch issues.`);
return false;
}
const { data } = await github.request('GET /repos/{owner}/{repo}/issues', {
owner: context.repo.owner,
repo: context.repo.repo,
labels: process.env.LABEL_NAME,
state: 'closed',
});
if (data.length > 0) {
core.info(`Found ${ data.length } closed issues with label ${ process.env.LABEL_NAME }. No further action required.`);
core.notice('Issues already labeled.');
return data.length > 0;
}
- name: Looking for commits between two releases
id: commits
uses: actions/github-script@v6
if: ${{ steps.has_labeled_issues.outputs.result == 'false' }}
env:
PREVIOUS_TAG: ${{ steps.tags.outputs.previous }}
LATEST_TAG: ${{ steps.tags.outputs.latest }}
......@@ -152,7 +137,6 @@ jobs:
- name: Looking for issues linked to commits
id: linked_issues
uses: actions/github-script@v6
if: ${{ steps.has_labeled_issues.outputs.result == 'false' }}
env:
COMMITS: ${{ steps.commits.outputs.result }}
with:
......@@ -238,29 +222,37 @@ jobs:
return issues;
}
- name: Creating label with latest release tag
- name: Creating label
id: label_creating
uses: actions/github-script@v6
if: ${{ steps.label.outputs.id == 'null' && steps.has_labeled_issues.outputs.result == 'false' }}
env:
LABEL_NAME: ${{ steps.tags.outputs.latest }}
LABEL_NAME: ${{ inputs.label_name }}
LABEL_COLOR: ${{ inputs.label_color }}
LABEL_DESCRIPTION: ${{ inputs.label_description }}
with:
script: |
const result = await github.request('POST /repos/{owner}/{repo}/labels', {
owner: context.repo.owner,
repo: context.repo.repo,
name: process.env.LABEL_NAME,
color: process.env.LABEL_COLOR,
description: `Release ${ process.env.LABEL_NAME }`,
});
try {
const result = await github.request('POST /repos/{owner}/{repo}/labels', {
owner: context.repo.owner,
repo: context.repo.repo,
name: process.env.LABEL_NAME,
color: process.env.LABEL_COLOR,
description: process.env.LABEL_DESCRIPTION,
});
core.info('Label was created.');
core.info('Label was created.');
} catch (error) {
if (error.status === 422) {
core.info('Label already exist.');
} else {
core.setFailed(error.message);
}
}
- name: Adding label to issues
id: labeling_issues
uses: actions/github-script@v6
if: ${{ steps.has_labeled_issues.outputs.result == 'false' }}
env:
LABEL_NAME: ${{ steps.tags.outputs.latest }}
ISSUES: ${{ steps.linked_issues.outputs.result }}
......@@ -274,7 +266,7 @@ jobs:
}
for (const issue of issues) {
core.info(`Adding release label to the issue #${ issue }...`);
core.info(`Adding label to the issue #${ issue }...`);
await addLabelToIssue(issue, process.env.LABEL_NAME);
core.info('Done.\n');
}
......
name: Pre-release
on:
workflow_dispatch:
push:
tags:
- 'v**'
concurrency:
group: ${{ github.workflow }}-${{ github.ref }} # Release-refs/tags/v1.0.0
cancel-in-progress: true
jobs:
checks:
name: Run code checks
uses: "./.github/workflows/checks.yml"
secrets: inherit
e2e_tests:
name: Run e2e tests
needs: checks
uses: "./.github/workflows/e2e-tests.yml"
secrets: inherit
label_issues:
name: Add pre-release label to issues
uses: './.github/workflows/label-issues-in-release.yml'
with:
tag: ${{ github.ref_name }}
label_name: 'pre-release'
secrets: inherit
name: Release
on:
workflow_dispatch:
release:
types: [ released ]
concurrency:
group: Release
group: ${{ github.workflow }}-${{ github.ref }} # Release-refs/tags/v1.0.0
cancel-in-progress: true
jobs:
remove_prerelease_label:
name: Remove pre-release label from issues
runs-on: ubuntu-latest
steps:
- name: Remove label
id: tags
uses: actions/github-script@v6
env:
LABEL_NAME: pre-release
with:
script: |
const { data: issues } = await github.request('GET /repos/{owner}/{repo}/issues', {
owner: context.repo.owner,
repo: context.repo.repo,
labels: process.env.LABEL_NAME,
state: 'all'
});
const issueIds = issues.map(({ node_id }) => node_id);
const labelId = issues[0].labels.find(({ name }) => name === process.env.LABEL_NAME).node_id;
core.info(`Found ${ issueIds.length } issues with label "${ process.env.LABEL_NAME }"`);
for (const issueId of issueIds) {
core.info(`Removing label for issue with node_id ${ issueId }...`);
await github.graphql(`
mutation($input: RemoveLabelsFromLabelableInput!) {
removeLabelsFromLabelable(input: $input) {
clientMutationId
}
}
`, {
input: {
labelIds: [ labelId ],
labelableId: issueId
},
});
core.info('Done.\n');
}
label_released_issues:
name: Label released issues
uses: './.github/workflows/label-released-issues.yml'
uses: './.github/workflows/label-issues-in-release.yml'
with:
tag: ${{ github.ref_name }}
label_name: ${{ github.ref_name }}
label_description: Release ${{ github.ref_name }}
secrets: inherit
if: ${{ github.event.action == 'released' }}
update_project_cards:
name: Update project tasks statuses
needs: label_released_issues
......@@ -24,4 +72,3 @@ jobs:
field_value: Released
issues: ${{ needs.label_released_issues.outputs.issues }}
secrets: inherit
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment