Skip to content

Commit

Permalink
feat(updater): Add changelog to nightly update provider
Browse files Browse the repository at this point in the history
  • Loading branch information
Hypfer committed May 26, 2022
1 parent 0becd44 commit 3a874db
Show file tree
Hide file tree
Showing 7 changed files with 251 additions and 14 deletions.
6 changes: 5 additions & 1 deletion .github/workflows/nightly_build.yml
Expand Up @@ -40,9 +40,13 @@
'name': 'UPX-compress valetudo binaries',
'run': 'npm run upx',
},
{
'name': 'Generate changelog',
'run': 'npm run generate_nightly_changelog',
},
{
'name': 'Build manifest',
'run': 'npm run build_release_manifest',
'run': 'npm run build_release_manifest nightly',
},
{
'name': 'Push binaries to nightly repo',
Expand Down
Expand Up @@ -21,11 +21,24 @@ class GithubValetudoNightlyUpdateProvider extends ValetudoUpdateProvider {
throw new Error("GithubValetudoNightlyUpdateProvider: Received invalid branch response");
}

let changelog = rawBranchResponse.data.commit.commit.message;
let manifest;

try {
manifest = await this.fetchManifest();

if (typeof manifest?.changelog === "string") {
changelog = manifest.changelog;
}
} catch (e) {
// intentional
}

return [
new ValetudoRelease({
version: rawBranchResponse.data.commit.sha,
releaseTimestamp: new Date(rawBranchResponse.data.commit.commit.committer.date),
changelog: rawBranchResponse.data.commit.commit.message,
changelog: changelog,
})
];
}
Expand All @@ -35,27 +48,33 @@ class GithubValetudoNightlyUpdateProvider extends ValetudoUpdateProvider {
* @return {Promise<Array<import("./ValetudoReleaseBinary")>>}
*/
async fetchBinariesForRelease(release) {
let releaseBinaries = [];
let rawManifestResponse = await axios.get(`${GithubValetudoNightlyUpdateProvider.ASSET_BASE_URL}${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);

// @ts-ignore
if (!rawManifestResponse.data) {
throw new Error(`GithubValetudoNightlyUpdateProvider: Invalid ${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);
}

const manifest = rawManifestResponse.data;
const manifest = await this.fetchManifest();

// @ts-ignore
releaseBinaries = Object.keys(manifest.sha256sums).map(name => {
return Object.keys(manifest.sha256sums).map(name => {
return new ValetudoReleaseBinary({
name: name,
// @ts-ignore
sha256sum: manifest.sha256sums[name] ?? "", //This will cause any install to fail but at least it's somewhat valid
downloadUrl: `${GithubValetudoNightlyUpdateProvider.ASSET_BASE_URL}${GithubValetudoNightlyUpdateProvider.BINARY_NAMES[name]}`
});
});
}


/**
* @private
* @return {Promise<any>}
*/
async fetchManifest() {
let rawManifestResponse = await axios.get(`${GithubValetudoNightlyUpdateProvider.ASSET_BASE_URL}${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);

// @ts-ignore
if (!rawManifestResponse.data) {
throw new Error(`GithubValetudoNightlyUpdateProvider: Invalid ${GithubValetudoNightlyUpdateProvider.MANIFEST_NAME}`);
}

return releaseBinaries;
return rawManifestResponse.data;
}
}

Expand Down
134 changes: 134 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion package.json
Expand Up @@ -19,12 +19,15 @@
"upx": "node ./util/upx_compress_valetudo.js",
"build_openapi_schema": "node util/build_openapi_schema.mjs",
"build_release_manifest": "node util/build_release_manifest.js",
"check_dependencies_for_update": "npx check-outdated --ignore-pre-releases --ignore-packages react-router-dom"
"check_dependencies_for_update": "npx check-outdated --ignore-pre-releases --ignore-packages react-router-dom",
"generate_changelog": "npx auto-changelog --commit-limit false --tag-pattern .+ --handlebars-setup ./util/res/auto_changelog_handlebars_helpers.js --template ./util/res/auto_changelog_template.hbs --output ./build/changelog.md",
"generate_nightly_changelog": "npx auto-changelog --commit-limit false --tag-pattern .+ --unreleased-only --handlebars-setup ./util/res/auto_changelog_handlebars_helpers.js --template ./util/res/auto_changelog_template.hbs --output ./build/changelog_nightly.md"
},
"devDependencies": {
"@typescript-eslint/eslint-plugin": "5.25.0",
"@typescript-eslint/experimental-utils": "5.25.0",
"@typescript-eslint/parser": "5.25.0",
"auto-changelog": "2.4.0",
"eslint": "8.16.0",
"eslint-plugin-jsdoc": "39.3.0",
"eslint-plugin-node": "11.1.0",
Expand Down
10 changes: 10 additions & 0 deletions util/build_release_manifest.js
Expand Up @@ -38,4 +38,14 @@ Object.values(binaries).forEach((path, i) => {
}
})

if (process.argv.length > 2 && process.argv[2] === "nightly") {
manifest.version = "nightly";

try {
manifest.changelog = fs.readFileSync("./build/changelog_nightly.md").toString();
} catch(e) {
//intentional
}
}

fs.writeFileSync("./build/valetudo_release_manifest.json", JSON.stringify(manifest, null, 2))
41 changes: 41 additions & 0 deletions util/res/auto_changelog_handlebars_helpers.js
@@ -0,0 +1,41 @@
function mergeAndSortCategories(merges, fixes, commits) {
const allCommits = [
...merges.map(merge => merge.commit),
...fixes.map(merge => merge.commit),
...commits
];

allCommits.forEach(commit => {
commit.breaking = /^[A-Za-z0-9.]+!(?:\(.*\))?:/.test(commit.subject);
})

return allCommits.sort((a, b) => {
return new Date(b.date) - new Date(a.date);
});
}

module.exports = function (Handlebars) {
Handlebars.registerHelper('get-all-non-breaking-commits', function (merges, fixes, commits) {
return mergeAndSortCategories(merges, fixes, commits).filter(c => c.breaking === false);
})

Handlebars.registerHelper('get-all-breaking-commits', function (merges, fixes, commits) {
return mergeAndSortCategories(merges, fixes, commits).filter(c => c.breaking === true);
})

Handlebars.registerHelper("render-ccm", function(subject) {
const match = /^(?<type>[A-Za-z0-9.]+)(?<breaking>!)?(?:\((?<scope>[A-Za-z0-9.]+)\))?: (?<message>.*)$/.exec(subject);

if (typeof match?.groups?.type === "string" && typeof match?.groups?.message === "string") {
let output = match.groups.message;

if (typeof match.groups.scope === "string") {
output = `**${match.groups.scope}**: ${output}`;
}

return output;
} else {
return subject;
}
})
}
26 changes: 26 additions & 0 deletions util/res/auto_changelog_template.hbs
@@ -0,0 +1,26 @@
{{#with releases.[0]}}
{{#if tag}}
## Valetudo {{tag}} ({{date}})
{{else}}
## Valetudo nightly ({{date}})
{{/if}}
{{#commit-list (get-all-breaking-commits merges fixes commits) heading='### Breaking Changes'}}
- {{render-ccm subject}} [`{{shorthash}}`]({{href}})
{{/commit-list}}

{{#commit-list (get-all-non-breaking-commits merges fixes commits) heading='### Features' message='^feat!?(?:\(.*\))?:'}}
- {{render-ccm subject}} [`{{shorthash}}`]({{href}})
{{/commit-list}}

{{#commit-list (get-all-non-breaking-commits merges fixes commits) heading='### Fixes' message='^fix!?(?:\(.*\))?:'}}
- {{render-ccm subject}} [`{{shorthash}}`]({{href}})
{{/commit-list}}

{{#commit-list (get-all-non-breaking-commits merges fixes commits) heading='### Refactoring' message='^refactor!?(?:\(.*\))?:'}}
- {{render-ccm subject}} [`{{shorthash}}`]({{href}})
{{/commit-list}}

{{#commit-list (get-all-non-breaking-commits merges fixes commits) heading='### Chores' message='^chore!?(?:\(.*\))?:'}}
- {{render-ccm subject}} [`{{shorthash}}`]({{href}})
{{/commit-list}}
{{/with}}

0 comments on commit 3a874db

Please sign in to comment.