First commit 🚀

Signed-off-by: divyansh42 <diagrawa@redhat.com>
This commit is contained in:
divyansh42 committed 2021-03-30 18:57:12 +05:30
commit 565d575198
20 files changed
+6476

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
module.exports = {
extends: [
"@redhat-actions/eslint-config",
],
};
+48
View File
@@ -0,0 +1,48 @@
name: CI checks
on:
push:
pull_request:
jobs:
lint:
name: Run ESLint
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- run: npm ci
- run: npm run lint
check-dist:
name: Check Distribution
runs-on: ubuntu-20.04
env:
BUNDLE_FILE: "dist/index.js"
BUNDLE_COMMAND: "npm run bundle"
steps:
- uses: actions/checkout@v2
- name: Install
run: npm ci
- name: Verify Latest Bundle
uses: redhat-actions/common/bundle-verifier@v1
with:
bundle_file: ${{ env.BUNDLE_FILE }}
bundle_command: ${{ env.BUNDLE_COMMAND }}
check-inputs-outputs:
name: Check Input and Output enums
runs-on: ubuntu-20.04
env:
IO_FILE: ./src/generated/inputs-outputs.ts
steps:
- uses: actions/checkout@v2
- name: Install dependencies
run: npm ci
- name: Verify Input and Output enums
uses: redhat-actions/common/action-io-generator@v1
with:
io_file: ${{ env.IO_FILE }}
+30
View File
@@ -0,0 +1,30 @@
name: Test Login
on:
push:
workflow_dispatch:
env:
REGISTRY_USER: diagrawa
IMAGE_REGISTRY: quay.io
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }}
jobs:
build-and-push:
name: Build and push image to Quay.io
runs-on: ubuntu-20.04
steps:
# Checkout podman login action github repository
- name: Checkout Podman login action
uses: actions/checkout@v2
- name: Login to Quay.io
uses: ./
with:
username: ${{ env.REGISTRY_USER }}
password: ${{ env.REGISTRY_PASSWORD }}
registry: ${{ env.IMAGE_REGISTRY }}
- name: Verify
run: |
echo ${XDG_RUNTIME_DIR}/containers/auth.json
+18
View File
@@ -0,0 +1,18 @@
name: Link checker
on:
push:
paths:
- '**.md'
pull_request:
paths:
-'**.md'
jobs:
markdown-link-check:
name: Check links in markdown
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v2
- uses: gaurav-nelson/github-action-markdown-link-check@v1
with:
use-verbose-mode: true
+2
View File
@@ -0,0 +1,2 @@
node_modules/
out/
+21
View File
@@ -0,0 +1,21 @@
# buildah-build Changelog
## v2.2.1
- Add note about multi architecture(s) image built support [1f7c249](https://github.com/redhat-actions/buildah-build/commit/1f7c2499306a8def9affb31cc7d43934bb87907d)
## v2.2
- Add output message if tags is not provided [76570bc](https://github.com/redhat-actions/buildah-build/commit/76570bc65b73d4072c85224b6f6e2fef3cf2b24b)
## v2.1
- Add `archs` input to allow building images for custom architectures [803a141](https://github.com/redhat-actions/buildah-build/commit/803a1413e7c2a594cbfb6680bca358bfdbe36745)
## v2
- Rename `tag` input to `tags`, to allow you to build multiple tags of the same image
- Add outputs `image` and `tags`, which output the image name and all tags of the image that was created [88e0085](https://github.com/redhat-actions/buildah-build/commit/88e00855444b8d915b900c8251f48c291ccedce5)
- (Internal) Add CI checks to the action that includes ESlint, bundle verifier and IO checker [20a8e62](https://github.com/redhat-actions/buildah-build/commit/20a8e62ce082870ed0ff1ee141bb98ae95432501)
## v1
- Initial marketplace release
## v0.1
- Initial pre-release
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2020 Red Hat. All rights reserved.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE
+161
View File
@@ -0,0 +1,161 @@
# buildah-build
[![CI checks](https://github.com/redhat-actions/buildah-build/workflows/CI%20checks/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22CI+checks%22)
[![Build](https://github.com/redhat-actions/buildah-build/workflows/Build/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3ABuild)
[![Build from dockerfile](https://github.com/redhat-actions/buildah-build/workflows/Build%20from%20dockerfile/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22Build+from+dockerfile%22)
[![Link checker](https://github.com/redhat-actions/buildah-build/workflows/Link%20checker/badge.svg)](https://github.com/redhat-actions/buildah-build/actions?query=workflow%3A%22Link+checker%22)
<br>
<br>
[![tag badge](https://img.shields.io/github/v/tag/redhat-actions/buildah-build)](https://github.com/redhat-actions/buildah-build/tags)
[![license badge](https://img.shields.io/github/license/redhat-actions/buildah-build)](./LICENSE)
[![size badge](https://img.shields.io/github/size/redhat-actions/buildah-build/dist/index.js)](./dist)
Buildah is a GitHub Action for building Docker and Kubernetes-compatible images quickly and easily.
Buildah only works on Linux. GitHub's [Ubuntu Environments](https://github.com/actions/virtual-environments#available-environments) (`ubuntu-18.04` and newer) come with buildah installed. If you are not using these environments, or if you want to use a different version, you must first [install buildah](https://github.com/containers/buildah/blob/master/install.md).
After building your image, use [push-to-registry](https://github.com/redhat-actions/push-to-registry) to push the image and make it pullable.
<a id="action-inputs"></a>
## Action Inputs
<a id="dockerfile-build-inputs"></a>
### Inputs for build from dockerfile
| Input Name | Description | Default |
| ---------- | ----------- | ------- |
| archs | Architecture(s) to build the image(s) for. For multiple architectures, separate by a comma. Refer to [Multi arch builds](#multi-arch-builds) to setup the `qemu-user-static` dependency. | `amd64`
| build-args | Build arguments to pass to the Docker build using `--build-arg`, if using a Dockerfile that requires ARGs. Use the form `arg_name=arg_value`, and separate arguments with newlines. | None
| context | Path to directory to use as the build context. | `.`
| dockerfiles | The list of Dockerfile paths to perform a build using docker instructions. This is a multiline input to allow multiple Dockerfiles. | **Must be provided**
| image | Name to give to the output image. | **Must be provided**
| layers | Set to true to cache intermediate layers during the build process. | None
| oci | Build the image using the OCI format, instead of the Docker format. By default, this is `false`, because images built using the OCI format have issues when published to Dockerhub. | `false`
| tags | The tags of the image to build. For multiple tags, separate by a space. For example, `latest ${{ github.sha }}` | `latest`
<a id="scratch-build-inputs"></a>
### Inputs for build without dockerfile
| Input Name | Description | Default |
| ---------- | ----------- | ------- |
| archs | Architecture(s) to build the image(s) for. For multiple architectures, separate by a comma. Refer to [Multi arch builds](#multi-arch-builds) to setup the `qemu-user-static` dependency. | `amd64`
| base-image | The base image to use for the container. | **Must be provided**
| content | Paths to files or directories to copy inside the container to create the file image. This is a multiline input to allow you to copy multiple files/directories.| None
| context | Path to directory to use as the build context. | `.`
| entrypoint | The entry point to set for the container. This is a multiline input; split arguments across lines. | None
| envs | The environment variables to be set when running the container. This is a multiline input to add multiple environment variables. | None
| image | Name to give to the output image. | **Must be provided**
| oci | Build the image using the OCI format, instead of the Docker format. By default, this is `false`, because images built using the OCI format have issues when published to Dockerhub. | `false`
| port | The port to expose when running the container. | None
| tags | The tags of the image to build. For multiple tags, separate by a space. For example, `latest ${{ github.sha }}` | `latest`
| workdir | The working directory to use within the container. | None
<a id="outputs"></a>
## Action Outputs
`image`: The name of the built image.<br>
For example, `spring-image`.
`tags`: A list of the tags that were created, separated by spaces.<br>
For example, `latest ${{ github.sha }}`.
<a id="build-types"></a>
## Build Types
You can configure the `buildah` action to build your image using one or more Dockerfiles, or none at all.
<a id="build-using-dockerfile"></a>
### Building using Dockerfiles
If you have been building your images with an existing Dockerfile, `buildah` can reuse your Dockerfile.
In this case the inputs needed are `image` and `dockerfiles`. `tag` is also recommended. If your Dockerfile requires ARGs, these can be passed using `build-arg`.
```yaml
name: Build Image using Dockerfile
on: [push]
jobs:
build:
name: Build image
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Buildah Action
uses: redhat-actions/buildah-build@v2
with:
image: my-new-image
tags: v1 ${{ github.sha }}
dockerfiles: |
./Dockerfile
build-args: |
some_arg=some_value
```
<a id="scratch-build"></a>
### Building without a Dockerfile
Building without a Dockerfile requires additional inputs, that would normally be specified in the Dockerfile.
Do not set `dockerfiles` if you are doing a build from scratch. Otherwise those Dockerfiles will be used, and the inputs below will be ignored.
- An output `image` name and usually a `tag`.
- `base-image`
- In a Dockerfile, this would be the `FROM` directive.
- `content` to copy into the new image
- In a Dockerfile, this would be `COPY` directives.
- `entrypoint` so the container knows what command to run.
- In a Dockerfile, this would be the `ENTRYPOINT`.
- All other optional configuration inputs, such as `port`, `envs`, and `workdir`.
Example of building a Spring Boot Java app image:
```yaml
name: Build Image
on: [push]
jobs:
build-image:
name: Build image without Dockerfile
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: mvn package
- name: Build Image
uses: redhat-actions/buildah-build@v2
with:
base-image: docker.io/fabric8/java-alpine-openjdk11-jre
image: my-new-image
tags: v1
content: |
target/spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar
entrypoint: java -jar spring-petclinic-2.3.0.BUILD-SNAPSHOT.jar
port: 8080
```
<a id="multi-arch-builds"></a>
## Multi arch builds
If building for an architecture other than `amd64`, install `qemu-user-static` using the following command.
```
sudo podman run --rm --privileged multiarch/qemu-user-static --reset -p yes
```
## Using private images
If your build requires a private image, you have to `docker login` in a step before running this action.
For example:
```yaml
- name: Log in to Red Hat Registry
run: echo "${{ secrets.REGISTRY_REDHAT_IO_PASSWORD }}" | docker login registry.redhat.io -u "${{ secrets.REGISTRY_REDHAT_IO_USER }}" --password-stdin
```
+19
View File
@@ -0,0 +1,19 @@
name: 'Podman login'
description: 'GitHub Action to login against a container registry'
author: 'Red Hat'
branding:
icon: circle
color: red
inputs:
registry:
description: 'Server address of Docker registry. If not set then will default to Docker Hub'
required: false
username:
description: 'Username used to log against the Docker registry'
required: false
password:
description: 'Password or personal access token used to log against the Docker registry'
required: false
runs:
using: 'node12'
main: 'dist/index.js'
+2
View File
@@ -0,0 +1,2 @@
require('./sourcemap-register.js');module.exports=(()=>{"use strict";var e={351:function(e,t,i){var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=n(i(87));const s=i(278);function issueCommand(e,t,i){const n=new Command(e,t,i);process.stdout.write(n.toString()+r.EOL)}t.issueCommand=issueCommand;function issue(e,t=""){issueCommand(e,{},t)}t.issue=issue;const o="::";class Command{constructor(e,t,i){if(!e){e="missing.command"}this.command=e;this.properties=t;this.message=i}toString(){let e=o+this.command;if(this.properties&&Object.keys(this.properties).length>0){e+=" ";let t=true;for(const i in this.properties){if(this.properties.hasOwnProperty(i)){const n=this.properties[i];if(n){if(t){t=false}else{e+=","}e+=`${i}=${escapeProperty(n)}`}}}}e+=`${o}${escapeData(this.message)}`;return e}}function escapeData(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A")}function escapeProperty(e){return s.toCommandValue(e).replace(/%/g,"%25").replace(/\r/g,"%0D").replace(/\n/g,"%0A").replace(/:/g,"%3A").replace(/,/g,"%2C")}},186:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n["throw"](e))}catch(e){r(e)}}function step(e){e.done?i(e.value):adopt(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};var r=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const s=i(351);const o=i(717);const u=i(278);const c=r(i(87));const l=r(i(622));var d;(function(e){e[e["Success"]=0]="Success";e[e["Failure"]=1]="Failure"})(d=t.ExitCode||(t.ExitCode={}));function exportVariable(e,t){const i=u.toCommandValue(t);process.env[e]=i;const n=process.env["GITHUB_ENV"]||"";if(n){const t="_GitHubActionsFileCommandDelimeter_";const n=`${e}<<${t}${c.EOL}${i}${c.EOL}${t}`;o.issueCommand("ENV",n)}else{s.issueCommand("set-env",{name:e},i)}}t.exportVariable=exportVariable;function setSecret(e){s.issueCommand("add-mask",{},e)}t.setSecret=setSecret;function addPath(e){const t=process.env["GITHUB_PATH"]||"";if(t){o.issueCommand("PATH",e)}else{s.issueCommand("add-path",{},e)}process.env["PATH"]=`${e}${l.delimiter}${process.env["PATH"]}`}t.addPath=addPath;function getInput(e,t){const i=process.env[`INPUT_${e.replace(/ /g,"_").toUpperCase()}`]||"";if(t&&t.required&&!i){throw new Error(`Input required and not supplied: ${e}`)}return i.trim()}t.getInput=getInput;function setOutput(e,t){s.issueCommand("set-output",{name:e},t)}t.setOutput=setOutput;function setCommandEcho(e){s.issue("echo",e?"on":"off")}t.setCommandEcho=setCommandEcho;function setFailed(e){process.exitCode=d.Failure;error(e)}t.setFailed=setFailed;function isDebug(){return process.env["RUNNER_DEBUG"]==="1"}t.isDebug=isDebug;function debug(e){s.issueCommand("debug",{},e)}t.debug=debug;function error(e){s.issue("error",e instanceof Error?e.toString():e)}t.error=error;function warning(e){s.issue("warning",e instanceof Error?e.toString():e)}t.warning=warning;function info(e){process.stdout.write(e+c.EOL)}t.info=info;function startGroup(e){s.issue("group",e)}t.startGroup=startGroup;function endGroup(){s.issue("endgroup")}t.endGroup=endGroup;function group(e,t){return n(this,void 0,void 0,function*(){startGroup(e);let i;try{i=yield t()}finally{endGroup()}return i})}t.group=group;function saveState(e,t){s.issueCommand("save-state",{name:e},t)}t.saveState=saveState;function getState(e){return process.env[`STATE_${e}`]||""}t.getState=getState},717:function(e,t,i){var n=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var i in e)if(Object.hasOwnProperty.call(e,i))t[i]=e[i];t["default"]=e;return t};Object.defineProperty(t,"__esModule",{value:true});const r=n(i(747));const s=n(i(87));const o=i(278);function issueCommand(e,t){const i=process.env[`GITHUB_${e}`];if(!i){throw new Error(`Unable to find environment variable for file command ${e}`)}if(!r.existsSync(i)){throw new Error(`Missing file at path: ${i}`)}r.appendFileSync(i,`${o.toCommandValue(t)}${s.EOL}`,{encoding:"utf8"})}t.issueCommand=issueCommand},278:(e,t)=>{Object.defineProperty(t,"__esModule",{value:true});function toCommandValue(e){if(e===null||e===undefined){return""}else if(typeof e==="string"||e instanceof String){return e}return JSON.stringify(e)}t.toCommandValue=toCommandValue},514:function(e,t,i){var n=this&&this.__awaiter||function(e,t,i,n){function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}return new(i||(i=Promise))(function(i,r){function fulfilled(e){try{step(n.next(e))}catch(Line truncated
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"sources":["../webpack:/podman-login/node_modules/@actions/core/lib/command.js","../webpack:/podman-login/node_modules/@actions/core/lib/core.js","../webpack:/podman-login/node_modules/@actions/core/lib/file-command.js","../webpack:/podman-login/node_modules/@actions/core/lib/utils.js","../webpack:/podman-login/node_modules/@actions/exec/lib/exec.js","../webpack:/podman-login/node_modules/@actions/exec/lib/toolrunner.js","../webpack:/podman-login/node_modules/@actions/io/lib/io-util.js","../webpack:/podman-login/node_modules/@actions/io/lib/io.js","../webpack:/podman-login/src/context.ts","../webpack:/podman-login/src/generated/inputs-outputs.ts","../webpack:/podman-login/src/index.ts","../webpack:/podman-login/src/utils.ts","../webpack:/podman-login/external \"assert\"","../webpack:/podman-login/external \"child_process\"","../webpack:/podman-login/external \"events\"","../webpack:/podman-login/external \"fs\"","../webpack:/podman-login/external \"os\"","../webpack:/podman-login/external \"path\"","../webpack:/podman-login/external \"util\"","../webpack:/podman-login/webpack/bootstrap","../webpack:/podman-login/webpack/runtime/compat","../webpack:/podman-login/webpack/startup"],"names":["__importStar","this","mod","__esModule","result","k","Object","hasOwnProperty","call","defineProperty","exports","value","os","__webpack_require__","utils_1","issueCommand","command","properties","message","cmd","Command","process","stdout","write","toString","EOL","issue","name","CMD_STRING","[object Object]","cmdStr","keys","length","first","key","val","escapeProperty","escapeData","s","toCommandValue","replace","__awaiter","thisArg","_arguments","P","generator","adopt","resolve","Promise","reject","fulfilled","step","next","e","rejected","done","then","apply","command_1","file_command_1","path","ExitCode","exportVariable","convertedVal","env","filePath","delimiter","commandValue","setSecret","secret","addPath","inputPath","getInput","options","toUpperCase","required","Error","trim","setOutput","setCommandEcho","enabled","setFailed","exitCode","Failure","error","isDebug","debug","warning","info","startGroup","endGroup","group","fn","saveState","getState","fs","existsSync","appendFileSync","encoding","input","undefined","String","JSON","stringify","tr","exec","commandLine","args","commandArgs","argStringToArray","toolPath","slice","concat","runner","ToolRunner","events","child","io","ioUtil","IS_WINDOWS","platform","EventEmitter","super","listeners","noPrefix","_getSpawnFileName","_getSpawnArgs","_isCmdFile","a","windowsVerbatimArguments","_windowsQuoteCmdArg","data","strBuffer","onLine","n","indexOf","line","substring","err","_debug","argline","str","end","endsWith","upperToolPath","_endsWith","arg","_uvQuoteCmdArg","cmdSpecialChars","needsQuotes","char","some","x","reverse","quoteHit","i","split","join","includes","cwd","silent","failOnStdErr","ignoreReturnCode","delay","outStream","errStream","stderr","argv0","isRooted","which","optionsNonNull","_cloneExecOptions","_getCommandString","state","ExecState","on","fileName","cp","spawn","_getSpawnOptions","stdbuffer","_processLineBuffer","stdline","errbuffer","processStderr","errline","processError","processExited","processClosed","CheckComplete","code","processExitCode","emit","removeAllListeners","stdin","argString","inQuotes","escaped","append","c","charAt","push","timeout","_setResult","setTimeout","HandleTimeout","clearTimeout","_a","assert_1","promises","chmod","copyFile","lstat","mkdir","readdir","readlink","rename","rmdir","stat","symlink","unlink","exists","fsPath","isDirectory","useStat","stats","p","normalizeSeparators","startsWith","test","mkdirP","maxDepth","depth","ok","dirname","err2","tryGetExecutablePath","extensions","console","log","isFile","upperExt","extname","validExt","isUnixExecutable","originalFilePath","extension","directory","upperName","basename","actualName","mode","gid","getgid","uid","getuid","childProcess","util_1","promisify","source","dest","force","recursive","readCopyOptions","destStat","newDest","sourceStat","cpDirRecursive","relative","mv","destExists","rmRF","isDir","tool","check","PATHEXT","directories","PATH","sep","Boolean","sourceDir","destDir","currentDepth","files","srcFile","destFile","srcFileStat","isSymbolicLink","symlinkFull","core","inputs_outputs_1","getInputs","registry","Inputs","REGISTRY","username","USERNAME","password","PASSWORD","Outputs","context_1","podmanPath","async","getPodmanPath","execute","run","catch","executable","execOptions","finalExecOptions","groupName","module","require","__webpack_module_cache__","moduleId","threw","__webpack_modules__","ab","__dirname"],"mappings":"6DACA,IAAAA,EAAAC,MAAAA,KAAAD,cAAA,SAAAE,GACA,GAAAA,GAAAA,EAAAC,WAAA,OAAAD,EACA,IAAAE,EAAA,GACA,GAAAF,GAAA,KAAA,IAAA,IAAAG,KAAAH,EAAA,GAAAI,OAAAC,eAAAC,KAAAN,EAAAG,GAAAD,EAAAC,GAAAH,EAAAG,GACAD,EAAA,WAAAF,EACA,OAAAE,GAEAE,OAAAG,eAAAC,EAAA,aAAA,CAAAC,MAAA,OACA,MAAAC,EAAAZ,EAAAa,EAAA,KACA,MAAAC,EAAAD,EAAA,KAWA,SAAAE,aAAAC,EAAAC,Line truncated
+3910
View File
File diff suppressed because it is too large. Load diff
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
### Copy this into .git/hooks and overwrite the empty one.
### This will ensure the bundle and ins-outs verification checks won't fail for you.
echo "----- Pre-commit -----"
set -ex
npx action-io-generator -o src/generated/inputs-outputs.ts
npm run lint
npm run bundle
git add -v dist/ src/generated
+2026
View File
File diff suppressed because it is too large. Load diff
+38
View File
@@ -0,0 +1,38 @@
{
"name": "podman-login",
"version": "1.0.0",
"engines": {
"node": "12"
},
"description": "GitHub Action to login against a container registry",
"repository": {
"type": "git",
"url": "https://github.com/redhat-actions/podman-login"
},
"main": "dist/index.js",
"scripts": {
"compile": "tsc -p .",
"bundle": "ncc build src/index.ts --source-map --minify",
"clean": "rm -rf out/ dist/",
"lint": "eslint . --max-warnings=0"
},
"keywords": [],
"author": "Red Hat",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.2.6",
"@actions/exec": "^1.0.4",
"@actions/io": "^1.0.2"
},
"devDependencies": {
"@redhat-actions/action-io-generator": "^1.5.0",
"@redhat-actions/eslint-config": "^1.2.11",
"@redhat-actions/tsconfig": "^1.1.1",
"@types/node": "^12",
"@typescript-eslint/eslint-plugin": "^4.14.1",
"@typescript-eslint/parser": "^4.14.1",
"@vercel/ncc": "^0.25.1",
"eslint": "^7.18.0",
"typescript": "^4.0.5"
}
}
+16
View File
@@ -0,0 +1,16 @@
import * as core from "@actions/core";
import { Inputs } from "./generated/inputs-outputs";
export interface ActionInputs {
registry: string;
username: string;
password: string;
}
export function getInputs(): ActionInputs {
return {
registry: core.getInput(Inputs.REGISTRY),
username: core.getInput(Inputs.USERNAME),
password: core.getInput(Inputs.PASSWORD),
};
}
+24
View File
@@ -0,0 +1,24 @@
// This file was auto-generated by action-io-generator. Do not edit by hand!
export enum Inputs {
/**
* Password or personal access token used to log against the Docker registry
* Required: false
* Default: None.
*/
PASSWORD = "password",
/**
* Server address of Docker registry. If not set then will default to Docker Hub
* Required: false
* Default: None.
*/
REGISTRY = "registry",
/**
* Username used to log against the Docker registry
* Required: false
* Default: None.
*/
USERNAME = "username",
}
export enum Outputs {
}
+47
View File
@@ -0,0 +1,47 @@
/***************************************************************************************************
* Copyright (c) Red Hat, Inc. All rights reserved.
* Licensed under the MIT License. See LICENSE file in the project root for license information.
**************************************************************************************************/
import * as core from "@actions/core";
import * as io from "@actions/io";
import * as os from "os";
import { getInputs } from "./context";
import { execute } from "./utils";
let podmanPath: string | undefined;
async function getPodmanPath(): Promise<string> {
if (podmanPath == null) {
podmanPath = await io.which("podman", true);
await execute(podmanPath, [ "version" ]);
}
return podmanPath;
}
async function run(): Promise<void> {
if (os.platform() !== "linux") {
throw new Error("Only supported on linux platform");
}
const { registry, username, password } = getInputs();
const args = [
"login",
registry,
"-u",
username,
"-p",
password,
];
try {
await execute(await getPodmanPath(), args);
core.info(`✅ Successfully logged in to ${registry}`);
}
catch (err) {
core.error(`Failed to login to ${registry}`);
}
}
run().catch(core.setFailed);
+66
View File
@@ -0,0 +1,66 @@
/***************************************************************************************************
* Copyright (c) Red Hat, Inc. All rights reserved.
* Licensed under the MIT License. See LICENSE file in the project root for license information.
**************************************************************************************************/
import * as core from "@actions/core";
import * as exec from "@actions/exec";
import * as path from "path";
interface ExecResult {
exitCode: number;
stdout: string;
stderr: string;
}
export async function execute(
executable: string,
args: string[],
execOptions: exec.ExecOptions & { group?: boolean } = {},
): Promise<ExecResult> {
let stdout = "";
let stderr = "";
const finalExecOptions = { ...execOptions };
finalExecOptions.ignoreReturnCode = true; // the return code is processed below
finalExecOptions.listeners = {
stdline: (line): void => {
stdout += `${line}\n`;
},
errline: (line): void => {
stderr += `${line}\n`;
},
};
if (execOptions.group) {
const groupName = [ executable, ...args ].join(" ");
core.startGroup(groupName);
}
try {
const exitCode = await exec.exec(executable, args, finalExecOptions);
if (execOptions.ignoreReturnCode !== true && exitCode !== 0) {
// Throwing the stderr as part of the Error makes the stderr show up in the action outline,
// which saves some clicking when debugging.
let error = `${path.basename(executable)} exited with code ${exitCode}`;
if (stderr) {
error += `\n${stderr}`;
}
throw new Error(error);
}
return {
exitCode,
stdout,
stderr,
};
}
finally {
if (execOptions.group) {
core.endGroup();
}
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"extends": "@redhat-actions/tsconfig",
"compilerOptions": {
"rootDir": "src/",
"outDir": "out/"
},
"include": [
"src/"
],
}