repo: reorder .github
This commit is contained in:
56
.github/scripts/release.mjs
vendored
Normal file
56
.github/scripts/release.mjs
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
//Imports
|
||||
import github from "@actions/github"
|
||||
import paths from "path"
|
||||
import url from "url"
|
||||
import sgit from "simple-git"
|
||||
|
||||
//Git setup
|
||||
const __metrics = paths.join(paths.dirname(url.fileURLToPath(import.meta.url)), "../..")
|
||||
const git = sgit(__metrics)
|
||||
|
||||
//Setup octokit
|
||||
const token = process.env.GITHUB_TOKEN
|
||||
const rest = github.getOctokit(token)
|
||||
|
||||
//Environment
|
||||
const maintainer = "lowlighter"
|
||||
const repository = process.env.GITHUB_REPOSITORY.match(/^(?<owner>[\s\S]+)[/](?<name>[\s\S]+)$/)?.groups ?? null
|
||||
const version = process.env.GITHUB_COMMIT_MESSAGE.match(/(?<version>v\d+[.]\d+)/)?.groups?.version ?? null
|
||||
|
||||
//Check arguments
|
||||
if ((!repository)||(!repository.name)||(!repository.owner))
|
||||
throw new Error(`Could not parse repository "${process.env.GITHUB_REPOSITORY}"`)
|
||||
console.log(`Repository: ${repository.owner}/${repository.name}`)
|
||||
if (!version)
|
||||
throw new Error(`Could not parse version from "${process.env.GITHUB_COMMIT_MESSAGE}"`)
|
||||
console.log(`Version: ${version}`)
|
||||
|
||||
//Load related pr
|
||||
const {data:{items:prs}} = await rest.search.issuesAndPullRequests({
|
||||
q:`repo:${repository.owner}/${repository.name} is:pr is:merged author:${maintainer} assignee:${maintainer} Release ${version} in:title`
|
||||
})
|
||||
|
||||
//Ensure that there is exactly one pr matching
|
||||
if (prs.length < 1)
|
||||
throw new Error(`No matching prs found`)
|
||||
if (prs.length > 1)
|
||||
throw new Error(`Multiple prs found (${prs.length} matching)`)
|
||||
const [patchnote] = prs
|
||||
console.log(`Using pr#${patchnote.number}: ${patchnote.title}`)
|
||||
|
||||
//Check whether release already exists
|
||||
try {
|
||||
const {data:{id}} = await rest.repos.getReleaseByTag({owner:repository.owner, repo:repository.name, tag:version})
|
||||
console.log(`Release ${version} already exists (#${id}), will replace it`)
|
||||
await rest.repos.deleteRelease({owner:repository.owner, repo:repository.name, release_id:id})
|
||||
console.log(`Deleting tag ${version}`)
|
||||
await git.push(["--delete", "origin", version])
|
||||
await new Promise(solve => setTimeout(solve, 15*1000))
|
||||
}
|
||||
catch {
|
||||
console.log(`Release ${version} does not exists yet, will create it`)
|
||||
}
|
||||
|
||||
//Publish release
|
||||
await rest.repos.createRelease({owner:repository.owner, repo:repository.name, tag_name:version, name:`Version ${version.replace(/^v/g, "")}`, body:patchnote.body})
|
||||
console.log(`Successfully published`)
|
||||
Reference in New Issue
Block a user