2023-04-15 17:22:48 -05:00
|
|
|
def main [
|
2023-04-15 18:17:58 -05:00
|
|
|
input: string # tar.gz file containing container image to be pushed to repository
|
|
|
|
...tags: string # Tags to be added to pushed container image
|
2023-08-29 08:54:46 -05:00
|
|
|
--username: string = "" # username
|
|
|
|
--password: string = "" # password
|
2023-04-15 18:54:36 -05:00
|
|
|
--registry: string = "" # container registry
|
|
|
|
--repository: string = "" # container repository
|
2023-04-15 18:17:58 -05:00
|
|
|
--no-latest-tag # Don't add "latest" tag to list of tags
|
2023-04-15 17:22:48 -05:00
|
|
|
--no-drone-tag # Don't add tag calculated from DRONE_BUILD_NUMBER and DRONE_COMMIT_SHA
|
2023-08-17 15:09:54 -05:00
|
|
|
--no-github-tag # Don't add tag calculated from GITHUB_RUN_NUMBER and GITHUB_SHA
|
2023-04-15 17:22:48 -05:00
|
|
|
] {
|
|
|
|
if not ($input | path exists) {
|
|
|
|
print $"($input) does not exist!"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
let tags = if not ($env | get -i PLUGIN_TAGS | is-empty) {
|
|
|
|
$tags | append ($env.PLUGIN_TAGS | split row ',' | str trim)
|
2023-08-29 09:37:09 -05:00
|
|
|
} else if not ($env | get -i INPUT_TAGS | is-empty) {
|
|
|
|
$tags | append ($env.INPUT_TAGS | split row ',' | str trim)
|
2023-04-15 17:22:48 -05:00
|
|
|
} else {
|
|
|
|
$tags
|
|
|
|
}
|
|
|
|
|
|
|
|
let tags = if (
|
2023-04-15 23:51:46 -05:00
|
|
|
(not $no_github_tag)
|
2023-04-15 17:22:48 -05:00
|
|
|
and
|
2023-04-15 23:51:46 -05:00
|
|
|
(not ($env | get -i GITHUB_RUN_NUMBER | is-empty))
|
2023-04-15 17:22:48 -05:00
|
|
|
and
|
2023-04-15 23:51:46 -05:00
|
|
|
(not ($env | get -i GITHUB_SHA | is-empty))
|
2023-04-15 17:22:48 -05:00
|
|
|
) {
|
2023-04-15 23:51:46 -05:00
|
|
|
$tags | append $"($env.GITHUB_RUN_NUMBER)-($env.GITHUB_SHA | str substring 0..8)"
|
2023-04-15 17:22:48 -05:00
|
|
|
} else {
|
|
|
|
$tags
|
|
|
|
}
|
|
|
|
|
|
|
|
let tags = if (
|
2023-04-15 23:51:46 -05:00
|
|
|
(not $no_drone_tag)
|
2023-04-15 17:22:48 -05:00
|
|
|
and
|
2023-04-15 23:51:46 -05:00
|
|
|
(not ($env | get -i DRONE_BUILD_NUMBER | is-empty))
|
2023-04-15 17:22:48 -05:00
|
|
|
and
|
2023-04-15 23:51:46 -05:00
|
|
|
(not ($env | get -i DRONE_COMMIT_SHA | is-empty))
|
2023-04-15 17:22:48 -05:00
|
|
|
) {
|
|
|
|
$tags | append $"($env.DRONE_BUILD_NUMBER)-($env.DRONE_COMMIT_SHA | str substring 0..8)"
|
|
|
|
} else {
|
|
|
|
$tags
|
|
|
|
}
|
|
|
|
|
2023-08-29 08:54:46 -05:00
|
|
|
let tags = if (not $no_latest_tag) {
|
|
|
|
$tags | append "latest"
|
|
|
|
} else {
|
|
|
|
$tags
|
|
|
|
}
|
|
|
|
|
2023-04-15 18:54:36 -05:00
|
|
|
let auth = {username: null, password: null}
|
|
|
|
|
|
|
|
let auth = (
|
2023-08-29 08:54:46 -05:00
|
|
|
if not ($username | is-empty) and ($password | is-empty) {
|
|
|
|
print "Got username and password from command line"
|
|
|
|
{username: $username, password: $password}
|
|
|
|
} else if (
|
2023-08-21 11:37:31 -05:00
|
|
|
(not ($env | get -i USERNAME | is-empty))
|
2023-04-15 18:54:36 -05:00
|
|
|
and
|
2023-08-21 11:37:31 -05:00
|
|
|
(not ($env | get -i PASSWORD | is-empty))
|
2023-04-15 18:54:36 -05:00
|
|
|
) {
|
2023-08-21 11:37:31 -05:00
|
|
|
print "Got username and password from USERNAME and PASSWORD"
|
2023-08-21 13:40:21 -05:00
|
|
|
{username: $env.USERNAME, password: $env.PASSWORD}
|
2023-04-15 18:54:36 -05:00
|
|
|
} else if (
|
|
|
|
(not ($env | get -i PLUGIN_USERNAME | is-empty))
|
|
|
|
and
|
|
|
|
(not ($env | get -i PLUGIN_PASSWORD | is-empty))
|
|
|
|
) {
|
2023-08-21 11:37:31 -05:00
|
|
|
print "Got username and password from PLUGIN_USERNAME and PLUGIN_PASSWORD"
|
2023-08-21 13:40:21 -05:00
|
|
|
{username: $env.PLUGIN_USERNAME, password: $env.PLUGIN_PASSWORD}
|
2023-08-29 09:37:09 -05:00
|
|
|
} else if (
|
|
|
|
(not ($env | get -i INPUT_USERNAME | is-empty))
|
|
|
|
and
|
|
|
|
(not ($env | get -i INPUT_PASSWORD | is-empty))
|
|
|
|
) {
|
|
|
|
print "Got username and password from INPUT_USERNAME and INPUT_PASSWORD"
|
|
|
|
{username: $env.INPUT_USERNAME, password: $env.INPUT_PASSWORD}
|
2023-08-17 15:09:54 -05:00
|
|
|
} else if (
|
2023-08-21 11:37:31 -05:00
|
|
|
(not ($env | get -i GITHUB_ACTOR | is-empty))
|
2023-08-17 15:09:54 -05:00
|
|
|
and
|
2023-08-21 11:37:31 -05:00
|
|
|
(not ($env | get -i GITHUB_TOKEN | is-empty))
|
2023-08-17 15:09:54 -05:00
|
|
|
) {
|
2023-08-21 11:37:31 -05:00
|
|
|
print "Got username and password from GITHUB_ACTOR and GITHUB_TOKEN"
|
2023-08-21 13:40:21 -05:00
|
|
|
{username: $env.GITHUB_ACTOR, password: $env.GITHUB_TOKEN}
|
2023-04-15 18:54:36 -05:00
|
|
|
} else {
|
|
|
|
print "Unable to determine authentication parameters!"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
let registry = (
|
|
|
|
if ($registry | is-empty) {
|
|
|
|
if not ($env | get -i PLUGIN_REGISTRY | is-empty) {
|
|
|
|
$env.PLUGIN_REGISTRY
|
2023-08-29 09:37:09 -05:00
|
|
|
} else if not ($env | get -i INPUT_REGISTRY | is-empty) {
|
|
|
|
$env.INPUT_REGISTRY
|
2023-08-17 15:09:54 -05:00
|
|
|
} else if not ($env | get -i REGISTRY | is-empty) {
|
|
|
|
$env.REGISTRY
|
2023-08-27 15:33:25 -05:00
|
|
|
} else if (
|
|
|
|
(not ($env | get -i GITHUB_SERVER_URL | is-empty))
|
|
|
|
and
|
|
|
|
(not ($env | get -i GITHUB_ACTOR | is-empty))
|
|
|
|
) {
|
|
|
|
$"($env.GITHUB_SERVER_URL)/($env.GITHUB_ACTOR)"
|
2023-04-15 18:54:36 -05:00
|
|
|
} else {
|
|
|
|
print "No registry specified!"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$registry
|
|
|
|
}
|
2023-08-29 08:54:46 -05:00
|
|
|
) | parse --regex "(?:https?://)?(?P<rest>.*)" | get 0.rest
|
2023-04-15 18:54:36 -05:00
|
|
|
|
2023-04-15 19:04:24 -05:00
|
|
|
let repository = (
|
2023-04-15 18:54:36 -05:00
|
|
|
if ($repository | is-empty) {
|
2023-04-15 19:04:24 -05:00
|
|
|
if not ($env | get -i PLUGIN_REPOSITORY | is-empty) {
|
|
|
|
$env.PLUGIN_REPOSITORY
|
2023-08-29 09:37:09 -05:00
|
|
|
} else if not ($env | get -i INPUT_REPOSITORY | is-empty) {
|
|
|
|
$env.INPUT_REPOSITORY
|
2023-08-17 15:09:54 -05:00
|
|
|
} else if not ($env | get -i REPOSITORY | is-empty) {
|
|
|
|
$env.REPOSITORY
|
2023-04-15 18:54:36 -05:00
|
|
|
} else {
|
|
|
|
print "No repository specified!"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$repository
|
|
|
|
}
|
|
|
|
)
|
2023-04-15 17:22:48 -05:00
|
|
|
|
2023-04-15 18:17:58 -05:00
|
|
|
|
2023-08-29 08:54:46 -05:00
|
|
|
regctl registry login $registry --user $auth.username --pass $auth.password
|
2023-04-16 01:14:30 -05:00
|
|
|
|
2023-08-29 08:54:46 -05:00
|
|
|
$tags | enumerate | each {
|
|
|
|
|item|
|
|
|
|
if $item.index == 0 {
|
|
|
|
let new_image = $"($registry)/($repository):($item.item)"
|
|
|
|
print $"Pushing ($new_image)"
|
|
|
|
regctl image import $new_image $input
|
|
|
|
print $"Pushed ($new_image)"
|
|
|
|
} else {
|
|
|
|
let old_image = $"($registry)/($repository):($tags | get 0)"
|
|
|
|
let new_image = $"($registry)/($repository):($item.item)"
|
|
|
|
print $"Copying ($old_image) ($new_image)"
|
|
|
|
regctl image copy $old_image $new_image
|
|
|
|
print $"Copied ($old_image) ($new_image)"
|
2023-04-15 18:17:58 -05:00
|
|
|
}
|
2023-04-15 17:22:48 -05:00
|
|
|
}
|
2023-04-16 01:14:30 -05:00
|
|
|
|
2023-08-29 08:54:46 -05:00
|
|
|
regctl registry logout $registry
|
2023-04-15 17:22:48 -05:00
|
|
|
}
|