-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathaction.js
35 lines (30 loc) · 1.31 KB
/
action.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
const process = require("process")
const { spawn } = require("child_process")
const fs = require("fs")
// basic implementation of @action/core.getInput()
function getInput(name) {
return process.env[`INPUT_${name.toUpperCase()}`].trim()
}
// collect action inputs:
let setupOpts = []
if (getInput("skip-login") === "true") setupOpts.push("--skip-login")
let buildOpts = [], value
if ((value = getInput("repository")) !== "") buildOpts.push(`-r ${value}`)
if ((value = getInput("repository-suffix")) !== "") buildOpts.push(`-s ${value}`)
if ((value = getInput("tag-suffix")) !== "") buildOpts.push(`-t ${value}`)
if ((value = getInput("build-directory")) !== "") buildOpts.push(`-d ${value}`)
if ((value = getInput("build-options")) !== "") buildOpts.push(`-o "${value}"`)
// generate a local build.sh script:
fs.writeFileSync("build.sh", `#! bash
set -eo pipefail
source ${__dirname}/build.sh
dockerSetup ${setupOpts.join(" ")}
echo $VERSION > VERSION
dockerBuildAndPush ${buildOpts.join(" ")}
`)
// execute it:
const build = spawn("bash", ["build.sh"], { maxBuffer: 100 * 1024 * 1024 })
build.stdout.on("data", data => { process.stdout.write(data) })
build.stderr.on("data", data => { process.stderr.write(data) })
build.on("error", error => { console.error(error) })
build.on("exit", code => { process.exit(code) })