Skip to content

Commit f91f994

Browse files
committed
chore: automatic release
1 parent 1175624 commit f91f994

File tree

3 files changed

+135
-0
lines changed

3 files changed

+135
-0
lines changed

.github/workflows/release.yml

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
name: Auto-publish
2+
on:
3+
push:
4+
branches:
5+
- master
6+
jobs:
7+
check:
8+
runs-on: ubuntu-latest
9+
outputs:
10+
changed: ${{ steps.check.outputs.changed }}
11+
version: ${{ steps.check.outputs.version }}
12+
commit: ${{ steps.check.outputs.commit }}
13+
steps:
14+
- name: Checkout repository
15+
uses: actions/checkout@v2
16+
- name: Check version changes
17+
uses: EndBug/version-check@v1
18+
id: check
19+
release:
20+
runs-on: ubuntu-latest
21+
needs: check
22+
if: needs.check.outputs.changed == 'true'
23+
outputs:
24+
upload_url: ${{ steps.release.outputs.upload_url }}
25+
steps:
26+
- name: Tag and Release
27+
uses: avakar/tag-and-release@v1
28+
with:
29+
tag_name: ${{ needs.check.outputs.version }}
30+
commit: ${{ needs.check.outputs.commit }}
31+
body: ${{ steps.changelog.outputs.changes }}
32+
env:
33+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
34+
id: release
35+
build:
36+
runs-on: ${{ matrix.os }}
37+
strategy:
38+
matrix:
39+
os:
40+
- windows-latest
41+
#- ubuntu-latest
42+
#- macos-latest
43+
needs: [check, release]
44+
steps:
45+
- name: Checkout repository
46+
uses: actions/checkout@v2
47+
with:
48+
ref: ${{ needs.check.outputs.commit }}
49+
- name: Parse Changelog # Exits if changelog not found
50+
id: changelog
51+
env:
52+
INPUT_VERSION: ${{ needs.check.outputs.version }}
53+
run: node ./scripts/changelog
54+
- name: Set up Node.js
55+
uses: actions/setup-node@v1
56+
with:
57+
registry-url: "https://registry.npmjs.org"
58+
- name: Install dependencies
59+
run: npm install
60+
- name: Build App
61+
run: npm run dist
62+
- name: Upload Asset Windows
63+
if: matrix.os == 'windows-latest'
64+
uses: actions/upload-release-asset@v1
65+
env:
66+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
67+
with:
68+
upload_url: ${{ needs.release.outputs.upload_url }}
69+
asset_path: ./dist/UnderScript Setup ${{ needs.check.outputs.version }}.exe
70+
asset_name: UnderScript.${{ needs.check.outputs.version }}.exe
71+
asset_content_type: application/octet-stream
72+
#- name: Upload Asset Mac
73+
#- name: Upload Asset Linux

scripts/changelog/entries.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/* eslint-env node */
2+
const versionSeparator = '\n## ';
3+
const regex = /^Version/;
4+
const unreleased = /\[unreleased\]/i;
5+
const titleRegex = / - | \(/;
6+
const idRegex = /[0-9][a-z0-9.\-+]+|unreleased/i;
7+
const dateRegex = /[0-9-/]+/;
8+
9+
function getEntries(data) {
10+
return String(data)
11+
.split(versionSeparator)
12+
.filter((e) => regex.test(e) || unreleased.test(e));
13+
}
14+
15+
function parseEntry(entry = '') {
16+
const [title, ...rest] = entry.trim().split('\n');
17+
18+
const [first, last] = title.split(titleRegex);
19+
const [id] = first.trim().match(idRegex);
20+
const [date] = last && last.trim().match(dateRegex) || [];
21+
22+
return {
23+
id,
24+
date,
25+
text: rest.join('\n'),
26+
};
27+
}
28+
29+
exports.getVersionById = (data, id) => {
30+
const versions = getEntries(data).map(parseEntry);
31+
32+
if (id) {
33+
return versions.find((v) => v.id === id);
34+
}
35+
36+
return versions
37+
.filter((v) => !unreleased.test(v.id))
38+
.shift();
39+
};

scripts/changelog/index.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/* eslint-env node */
2+
const fs = require('fs');
3+
const { getInput, setOutput } = require('./io');
4+
const { getVersionById } = require('./entries');
5+
6+
const changelog = getInput('path') || './changelog.md';
7+
const target = getInput('version');
8+
9+
if (!target) {
10+
console.log('No version provided, will retrieve latest available');
11+
}
12+
13+
fs.readFile(changelog, (_, data) => {
14+
const version = getVersionById(data, target);
15+
16+
if (!version) {
17+
throw new Error('Version not found');
18+
}
19+
20+
setOutput('version', version.id);
21+
setOutput('date', version.date);
22+
setOutput('changes', version.text);
23+
});

0 commit comments

Comments
 (0)