mirror of
https://github.com/ButlerLogic/action-autotag.git
synced 2025-09-08 06:04:05 +07:00
WIP
This commit is contained in:
123
lib/main.js
123
lib/main.js
@ -6,22 +6,131 @@ const path = require('path')
|
||||
|
||||
async function run() {
|
||||
try {
|
||||
const git = new github.GitHub(process.env.INPUT_GITHUB_TOKEN)
|
||||
core.warning(` Available environment variables:\n -> ${Object.keys(process.env).map(i => i + ' :: ' + process.env[i]).join('\n -> ')}`)
|
||||
core.debug(` Available environment variables:\n -> ${Object.keys(process.env).map(i => i + ' :: ' + process.env[i]).join('\n -> ')}`)
|
||||
|
||||
let dir = fs.readdirSync(path.resolve(process.env.GITHUB_WORKSPACE), { withFileTypes: true }).map(entry => {
|
||||
return `${entry.isDirectory() ? '> ' : ' - '}${entry.name}`
|
||||
}).join('\n')
|
||||
|
||||
core.warning(` Working Directory: ${process.env.GITHUB_WORKSPACE}:\n${dir}`)
|
||||
core.debug(` Working Directory: ${process.env.GITHUB_WORKSPACE}:\n${dir}`)
|
||||
|
||||
let pkg = require(path.join(process.env.GITHUB_WORKSPACE, 'package.json'))
|
||||
let pkgfile = path.join(process.env.GITHUB_WORKSPACE, 'package.json')
|
||||
|
||||
core.warning(` ${pkg.version}`)
|
||||
if (!fs.existsSync(pkgfile)) {
|
||||
core.setFailed('package.json does not exist.')
|
||||
return
|
||||
}
|
||||
|
||||
core.setOutput('tag', '')
|
||||
let pkg = require(pkgfile)
|
||||
|
||||
core.setOutput('version', pkg.version)
|
||||
core.debug(` Detected version ${pkg.version}`)
|
||||
|
||||
if (!process.env.hasOwnProperty('INPUT_GITHUB_TOKEN') || process.env.INPUT_GITHUB_TOKEN.trim().length === 0) {
|
||||
core.setFailed('Invalid or missing GITHUB_TOKEN.')
|
||||
return
|
||||
}
|
||||
|
||||
// Check existing for existing tag
|
||||
const git = new github.GitHub(process.env.INPUT_GITHUB_TOKEN)
|
||||
const owner = process.env.GITHUB_ACTOR
|
||||
const repo = process.env.GITHUB_REPOSITORY.split('/').pop()
|
||||
|
||||
let tags = await git.repos.listTags({
|
||||
owner,
|
||||
repo,
|
||||
per_page: 100
|
||||
})
|
||||
|
||||
// Check for existance of tag and abort (short circuit) if it already exists.
|
||||
for (let tag of tags.data) {
|
||||
if (tag.name.trim().toLowerCase() === pkg.version.trim().toLowerCase()) {
|
||||
core.warning(`"${tag.name.trim()}" tag already exists.`)
|
||||
core.setOutput('tagname', '')
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Create the new tag name
|
||||
let tagName = pkg.version
|
||||
const tagPrefix = core.getInput('tag_prefix', { required: false })
|
||||
const tagSuffix = core.getInput('tag_suffix', { required: false })
|
||||
const tagMsg = core.getInput('tag_message', { required: false }).trim()
|
||||
|
||||
tagName = `${tagPrefix}${tagName}${tagSuffix}`
|
||||
|
||||
if (tagMsg.length === 0 && tags.data.length > 0) {
|
||||
try {
|
||||
latestTag = tags.data.shift()
|
||||
|
||||
let changelog = await git.repos.compareCommits({
|
||||
owner,
|
||||
repo,
|
||||
base: latestTag.name,
|
||||
head: 'master'
|
||||
})
|
||||
|
||||
tagMsg = changelog.data.commits.map(commit => `**1) ${commit.commit.message}** (${commit.author.login})\n(SHA: ${commit.sha})\n`).join('\n')
|
||||
} catch (e) {
|
||||
core.setFailed(e.message)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
let newTag
|
||||
|
||||
try {
|
||||
newTag = await git.git.createTag({
|
||||
owner,
|
||||
repo,
|
||||
tag: tagName,
|
||||
message: tagMsg.trim().length > 0
|
||||
? tagMsg
|
||||
: `Version ${pkg.version}`,
|
||||
object: process.env.GITHUB_SHA,
|
||||
type: 'commit'
|
||||
})
|
||||
|
||||
core.warning(`Created new tag: ${newTag.data.tag}`)
|
||||
} catch (e) {
|
||||
core.setFailed(e.message)
|
||||
return
|
||||
}
|
||||
|
||||
let newReference
|
||||
|
||||
try {
|
||||
newReference = await git.git.createRef({
|
||||
owner,
|
||||
repo,
|
||||
ref: `refs/tags/${newTag.data.tag}`,
|
||||
sha: newTag.data.sha
|
||||
})
|
||||
|
||||
core.warning(`Reference ${newReference.data.ref} available at ${newReference.data.url}`)
|
||||
} catch (e) {
|
||||
core.warning({
|
||||
owner,
|
||||
repo,
|
||||
ref: `refs/tags/${newTag.data.tag}`,
|
||||
sha: newTag.data.sha
|
||||
})
|
||||
|
||||
core.setFailed(e.message)
|
||||
return
|
||||
}
|
||||
|
||||
// Store values for other actions
|
||||
if (typeof newTag === 'object' && typeof newReference === 'object') {
|
||||
core.setOutput('tagname', tagName)
|
||||
core.setOutput('tagsha', newTag.data.sha)
|
||||
core.setOutput('taguri', newReference.data.url)
|
||||
}
|
||||
} catch (error) {
|
||||
core.setFailed(error.message)
|
||||
core.warning(error.message)
|
||||
core.setOutput('tagname', '')
|
||||
core.setOutput('tagsha', '')
|
||||
core.setOutput('taguri', '')
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user