mirror of
https://github.com/n8n-io/n8n.git
synced 2026-09-24 23:22:38 +08:00
ci: Create github releases from mjs scripts (#27121)
This commit is contained in:
@@ -0,0 +1,81 @@
|
||||
import {
|
||||
deleteRelease,
|
||||
ensureEnvVar,
|
||||
getExistingRelease,
|
||||
initGithub,
|
||||
isReleaseTrack,
|
||||
writeGithubOutput,
|
||||
} from './github-helpers.mjs';
|
||||
|
||||
/**
|
||||
* Creates release in GitHub.
|
||||
*
|
||||
* Required env variables:
|
||||
* - RELEASE_TAG - Release tag on git e.g. n8n@2.13.0
|
||||
* - BODY - Body of the release. Contains release notes etc.
|
||||
* - IS_PRE_RELEASE - If releasing in pre-release. Currently only for beta track.
|
||||
* - MAKE_LATEST - If released version should be marked as latest on GitHub
|
||||
* - COMMIT - Commitish for release to point to
|
||||
*
|
||||
* Optional env variables:
|
||||
* - ADDITIONAL_TAGS - Comma-separated list of additional tags to release under e.g. beta
|
||||
*
|
||||
* GitHub variables
|
||||
* - GITHUB_TOKEN - Used to authenticate to octokit - Can be overwritten for privileged access
|
||||
* - GITHUB_REPOSITORY - Used to determine target repository
|
||||
* */
|
||||
async function createGitHubRelease() {
|
||||
const RELEASE_TAG = ensureEnvVar('RELEASE_TAG');
|
||||
const ADDITIONAL_TAGS = process.env.ADDITIONAL_TAGS ?? '';
|
||||
const BODY = ensureEnvVar('BODY');
|
||||
const IS_PRE_RELEASE = ensureEnvVar('IS_PRE_RELEASE');
|
||||
const MAKE_LATEST = ensureEnvVar('MAKE_LATEST');
|
||||
const COMMIT = ensureEnvVar('COMMIT');
|
||||
|
||||
const { octokit, owner, repo } = initGithub();
|
||||
|
||||
const allTags = [
|
||||
RELEASE_TAG,
|
||||
...ADDITIONAL_TAGS.split(',')
|
||||
.map((t) => t.trim())
|
||||
.filter(Boolean),
|
||||
];
|
||||
const releases = [];
|
||||
|
||||
for (const tag of allTags) {
|
||||
const existingRelease = await getExistingRelease(tag);
|
||||
const isReleaseTrackTag = isReleaseTrack(tag);
|
||||
|
||||
// If we have an existing track release, we want to
|
||||
// delete the old release before pushing a new one.
|
||||
if (isReleaseTrackTag && existingRelease) {
|
||||
await deleteRelease(existingRelease.id);
|
||||
}
|
||||
|
||||
const releaseResponse = await octokit.rest.repos.createRelease({
|
||||
tag_name: tag,
|
||||
name: tag,
|
||||
body: BODY,
|
||||
draft: false,
|
||||
prerelease: IS_PRE_RELEASE === 'true',
|
||||
make_latest: MAKE_LATEST === 'true' ? 'true' : 'false',
|
||||
target_commitish: COMMIT,
|
||||
owner,
|
||||
repo,
|
||||
});
|
||||
|
||||
const release = releaseResponse.data;
|
||||
releases.push(release);
|
||||
|
||||
console.log(`Successfully created release ${release.html_url}`);
|
||||
}
|
||||
|
||||
writeGithubOutput({
|
||||
release_urls: releases.map((release) => release.html_url).join(', '),
|
||||
});
|
||||
}
|
||||
|
||||
// only run when executed directly, not when imported by tests
|
||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
createGitHubRelease();
|
||||
}
|
||||
Reference in New Issue
Block a user