2022-10-12 07:07:13 +02:00
|
|
|
import * as core from '@actions/core';
|
2022-12-15 14:46:34 +01:00
|
|
|
import {Context} from '@actions/github/lib/context';
|
2023-02-20 22:32:55 +01:00
|
|
|
import {Util} from '@docker/actions-toolkit/lib/util';
|
2022-12-15 14:46:34 +01:00
|
|
|
import {Git} from '@docker/actions-toolkit/lib/git';
|
|
|
|
import {GitHub} from '@docker/actions-toolkit/lib/github';
|
2020-10-25 02:25:23 +01:00
|
|
|
|
|
|
|
export interface Inputs {
|
2022-12-15 14:46:34 +01:00
|
|
|
context: ContextSource;
|
2020-10-25 02:25:23 +01:00
|
|
|
images: string[];
|
2021-03-29 13:04:53 +02:00
|
|
|
tags: string[];
|
|
|
|
flavor: string[];
|
|
|
|
labels: string[];
|
2020-10-25 02:25:23 +01:00
|
|
|
sepTags: string;
|
|
|
|
sepLabels: string;
|
2021-04-30 00:51:48 +02:00
|
|
|
bakeTarget: string;
|
2020-10-25 02:25:23 +01:00
|
|
|
githubToken: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export function getInputs(): Inputs {
|
|
|
|
return {
|
2022-12-15 14:46:34 +01:00
|
|
|
context: (core.getInput('context') || ContextSource.workflow) as ContextSource,
|
2023-06-13 12:23:13 +02:00
|
|
|
images: Util.getInputList('images', {ignoreComma: true, comment: '#'}),
|
|
|
|
tags: Util.getInputList('tags', {ignoreComma: true, comment: '#'}),
|
|
|
|
flavor: Util.getInputList('flavor', {ignoreComma: true, comment: '#'}),
|
|
|
|
labels: Util.getInputList('labels', {ignoreComma: true, comment: '#'}),
|
2022-10-07 22:45:46 +02:00
|
|
|
sepTags: core.getInput('sep-tags', {trimWhitespace: false}) || `\n`,
|
|
|
|
sepLabels: core.getInput('sep-labels', {trimWhitespace: false}) || `\n`,
|
2021-05-10 15:54:35 +02:00
|
|
|
bakeTarget: core.getInput('bake-target') || `docker-metadata-action`,
|
2020-10-25 02:25:23 +01:00
|
|
|
githubToken: core.getInput('github-token')
|
|
|
|
};
|
|
|
|
}
|
2022-12-15 14:46:34 +01:00
|
|
|
|
|
|
|
export enum ContextSource {
|
|
|
|
workflow = 'workflow',
|
|
|
|
git = 'git'
|
|
|
|
}
|
|
|
|
|
|
|
|
export async function getContext(source: ContextSource): Promise<Context> {
|
|
|
|
switch (source) {
|
|
|
|
case ContextSource.workflow:
|
|
|
|
return getContextFromWorkflow();
|
|
|
|
case ContextSource.git:
|
|
|
|
return await getContextFromGit();
|
|
|
|
default:
|
|
|
|
throw new Error(`Invalid context source: ${source}`);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function getContextFromWorkflow(): Context {
|
|
|
|
const context = GitHub.context;
|
|
|
|
|
|
|
|
// Needs to override Git reference with pr ref instead of upstream branch ref
|
|
|
|
// for pull_request_target event
|
|
|
|
// https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target
|
|
|
|
if (/pull_request_target/.test(context.eventName)) {
|
|
|
|
context.ref = `refs/pull/${context.payload.number}/merge`;
|
|
|
|
}
|
|
|
|
|
|
|
|
// DOCKER_METADATA_PR_HEAD_SHA env var can be used to set associated head
|
|
|
|
// SHA instead of commit SHA that triggered the workflow on pull request
|
|
|
|
// event.
|
|
|
|
if (/true/i.test(process.env.DOCKER_METADATA_PR_HEAD_SHA || '')) {
|
|
|
|
if ((/pull_request/.test(context.eventName) || /pull_request_target/.test(context.eventName)) && context.payload?.pull_request?.head?.sha != undefined) {
|
|
|
|
context.sha = context.payload.pull_request.head.sha;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return context;
|
|
|
|
}
|
|
|
|
|
|
|
|
async function getContextFromGit(): Promise<Context> {
|
|
|
|
return await Git.context();
|
|
|
|
}
|