Skip to content

Commit 1a3c4b8

Browse files
authored
Merge pull request #195 from redhat-appstudio/automate-releases
Automate releases
2 parents c31b4e8 + 20515fa commit 1a3c4b8

File tree

3 files changed

+116
-0
lines changed

3 files changed

+116
-0
lines changed

.github/workflows/release.yml

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
name: Release
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
version:
7+
description: "Version to set in release.json (e.g. 1.2.3)"
8+
required: true
9+
type: string
10+
backstage_target:
11+
description: "Version of backstage to target for release (e.g. 1.46.1)"
12+
required: true
13+
type: string
14+
15+
permissions:
16+
contents: write
17+
pull-requests: write
18+
19+
jobs:
20+
release:
21+
runs-on: ubuntu-latest
22+
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
with:
27+
fetch-depth: 0
28+
29+
- name: Setup Node
30+
uses: actions/setup-node@v4
31+
with:
32+
node-version: 20
33+
cache: npm
34+
35+
- name: Run updater script
36+
env:
37+
VERSION: ${{ inputs.version }}
38+
run: |
39+
node utils/update-release-json.js \
40+
--version ${{ inputs.version }}
41+
42+
node utils/bump-plugins.js \
43+
--target ${{ inputs.backstage_target }}
44+
--ref main
45+
--debug
46+
47+
- name: Configure git
48+
run: |
49+
git config user.name "github-actions[bot]"
50+
# Github bot: https://api.github.com/users/github-actions%5Bbot%5D
51+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
52+
53+
- name: Create Pull Request
54+
env:
55+
VERSION: ${{ inputs.version }}
56+
uses: peter-evans/create-pull-request@v6
57+
with:
58+
base: main
59+
branch: release-${{ inputs.version }}
60+
title: "chore: auto-release to version ${{ inputs.version }}"
61+
body: |
62+
This PR was automatically generated by a GitHub Actions workflow.
63+
64+
Auto release to version ${{ inputs.version }}
65+
commit-message: "chore: auto-release to version ${{ inputs.version }}"
66+
labels: automated, release-${{ inputs.version }}
67+
delete-branch: true
68+
# What to commit
69+
add-paths: |
70+
release.json
71+
plugins/**

release.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"version": "1.8"
3+
}

utils/update-release-json.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/usr/bin/env node
2+
"use strict";
3+
/**
4+
* Update the 'release.json' file to the next release
5+
*
6+
* Usage:
7+
* node update-release-json.js \
8+
* --version 1.9
9+
*/
10+
11+
const { readFile, writeFile } = require("node:fs/promises");
12+
const { parseArgs, required } = require("./shared");
13+
14+
async function updateVersionFile(version) {
15+
const path = "release.json";
16+
17+
const raw = await readFile(path, "utf8");
18+
let json;
19+
try {
20+
json = JSON.parse(raw);
21+
} catch (e) {
22+
console.error(`ERROR: ${path} is not valid JSON`);
23+
process.exit(1);
24+
}
25+
26+
json.version = version.trim();
27+
28+
await writeFile(path, JSON.stringify(json, null, 2) + "\n", "utf8");
29+
30+
console.log(`Updated ${path} version -> ${json.version}`);
31+
}
32+
33+
async function main() {
34+
const args = parseArgs(process.argv.slice(2));
35+
const version = required("version", args.version);
36+
updateVersionFile(version);
37+
}
38+
39+
main().catch((e) => {
40+
console.error(`Error: ${e.message}`);
41+
process.exit(1);
42+
});

0 commit comments

Comments
 (0)