171 lines
4.4 KiB
TypeScript
171 lines
4.4 KiB
TypeScript
import * as core from '@actions/core';
|
|
import {Context} from "@actions/github/lib/context";
|
|
import {readFileSync} from 'fs';
|
|
import {ArtifactGlobber} from './ArtifactGlobber';
|
|
import {Artifact} from './Artifact';
|
|
|
|
export interface Inputs {
|
|
readonly allowUpdates: boolean
|
|
readonly artifacts: Artifact[]
|
|
readonly commit: string
|
|
readonly createdReleaseBody?: string
|
|
readonly createdReleaseName?: string
|
|
readonly draft: boolean
|
|
readonly owner: string
|
|
readonly prerelease: boolean
|
|
readonly replacesArtifacts: boolean
|
|
readonly repo: string
|
|
readonly tag: string
|
|
readonly token: string
|
|
readonly updatedReleaseBody?: string
|
|
readonly updatedReleaseName?: string
|
|
}
|
|
|
|
export class CoreInputs implements Inputs {
|
|
private artifactGlobber: ArtifactGlobber
|
|
private context: Context
|
|
|
|
constructor(artifactGlobber: ArtifactGlobber, context: Context) {
|
|
this.artifactGlobber = artifactGlobber
|
|
this.context = context
|
|
}
|
|
|
|
get allowUpdates(): boolean {
|
|
const allow = core.getInput('allowUpdates')
|
|
return allow == 'true'
|
|
}
|
|
|
|
get artifacts(): Artifact[] {
|
|
let artifacts = core.getInput('artifacts')
|
|
if (!artifacts) {
|
|
artifacts = core.getInput('artifact')
|
|
}
|
|
if (artifacts) {
|
|
let contentType = core.getInput('artifactContentType')
|
|
if (!contentType) {
|
|
contentType = 'raw'
|
|
}
|
|
return this.artifactGlobber
|
|
.globArtifactString(artifacts, contentType)
|
|
}
|
|
return []
|
|
}
|
|
|
|
get createdReleaseBody(): string | undefined {
|
|
if (CoreInputs.omitBody) return undefined
|
|
return this.body
|
|
}
|
|
|
|
private static get omitBody(): boolean {
|
|
return core.getInput('omitBody') == 'true'
|
|
}
|
|
|
|
private get body() : string | undefined {
|
|
const body = core.getInput('body')
|
|
if (body) {
|
|
return body
|
|
}
|
|
|
|
const bodyFile = core.getInput('bodyFile')
|
|
if (bodyFile) {
|
|
return this.stringFromFile(bodyFile)
|
|
}
|
|
|
|
return ''
|
|
}
|
|
|
|
get commit(): string {
|
|
return core.getInput('commit')
|
|
}
|
|
|
|
get createdReleaseName(): string | undefined {
|
|
if (CoreInputs.omitName) return undefined
|
|
return this.name
|
|
}
|
|
|
|
private static get omitName(): boolean {
|
|
return core.getInput('omitName') == 'true'
|
|
}
|
|
|
|
private get name(): string | undefined {
|
|
const name = core.getInput('name')
|
|
if (name) {
|
|
return name
|
|
}
|
|
|
|
return this.tag
|
|
}
|
|
|
|
get draft(): boolean {
|
|
const draft = core.getInput('draft')
|
|
return draft == 'true'
|
|
}
|
|
|
|
get owner(): string {
|
|
let owner = core.getInput('owner')
|
|
if (owner) {
|
|
return owner
|
|
}
|
|
return this.context.repo.owner
|
|
}
|
|
|
|
get prerelease(): boolean {
|
|
const preRelease = core.getInput('prerelease')
|
|
return preRelease == 'true'
|
|
}
|
|
|
|
get replacesArtifacts(): boolean {
|
|
const replaces = core.getInput('replacesArtifacts')
|
|
return replaces == 'true'
|
|
}
|
|
|
|
get repo(): string {
|
|
let repo = core.getInput('repo')
|
|
if (repo) {
|
|
return repo
|
|
}
|
|
return this.context.repo.repo
|
|
}
|
|
|
|
get tag(): string {
|
|
const tag = core.getInput('tag')
|
|
if (tag) {
|
|
return tag;
|
|
}
|
|
|
|
const ref = this.context.ref
|
|
const tagPath = "refs/tags/"
|
|
if (ref && ref.startsWith(tagPath)) {
|
|
return ref.substr(tagPath.length, ref.length)
|
|
}
|
|
|
|
throw Error("No tag found in ref or input!")
|
|
}
|
|
|
|
get token(): string {
|
|
return core.getInput('token', {required: true})
|
|
}
|
|
|
|
get updatedReleaseBody(): string | undefined {
|
|
if (CoreInputs.omitBody || CoreInputs.omitBodyDuringUpdate) return undefined
|
|
return this.body
|
|
}
|
|
|
|
private static get omitBodyDuringUpdate(): boolean {
|
|
return core.getInput('omitBodyDuringUpdate') == 'true'
|
|
}
|
|
|
|
get updatedReleaseName(): string | undefined {
|
|
if (CoreInputs.omitName || CoreInputs.omitNameDuringUpdate) return undefined
|
|
return this.name
|
|
}
|
|
|
|
private static get omitNameDuringUpdate(): boolean {
|
|
return core.getInput('omitNameDuringUpdate') == 'true'
|
|
}
|
|
|
|
stringFromFile(path: string): string {
|
|
return readFileSync(path, 'utf-8')
|
|
}
|
|
}
|