From 57e8089bf247ce093a1acb4c7adc21bfbdae850f Mon Sep 17 00:00:00 2001 From: Huamin Chen Date: Thu, 7 Dec 2023 18:48:07 -0500 Subject: [PATCH] Initial commit --- .gitattributes | 1 + .github/dependabot.yml | 21 ++++++ .github/linters/.markdown-lint.yml | 7 ++ .github/linters/.yaml-lint.yml | 10 +++ .github/workflows/ci.yml | 73 +++++++++++++++++++ .github/workflows/linter.yml | 30 ++++++++ .gitignore | 25 +++++++ .prettierrc.json | 16 +++++ CODEOWNERS | 4 ++ Dockerfile | 11 +++ LICENSE | 21 ++++++ README.md | 111 +++++++++++++++++++++++++++++ action.yml | 21 ++++++ entrypoint.sh | 12 ++++ 14 files changed, 363 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/dependabot.yml create mode 100644 .github/linters/.markdown-lint.yml create mode 100644 .github/linters/.yaml-lint.yml create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/linter.yml create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 CODEOWNERS create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 action.yml create mode 100755 entrypoint.sh diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..6313b56 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto eol=lf diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9d98c2a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,21 @@ +version: 2 +updates: + - package-ecosystem: docker + directory: / + schedule: + interval: weekly + groups: + docker-minor: + update-types: + - minor + - patch + + - package-ecosystem: github-actions + directory: / + schedule: + interval: weekly + groups: + actions-minor: + update-types: + - minor + - patch diff --git a/.github/linters/.markdown-lint.yml b/.github/linters/.markdown-lint.yml new file mode 100644 index 0000000..6d79773 --- /dev/null +++ b/.github/linters/.markdown-lint.yml @@ -0,0 +1,7 @@ +# Unordered list style +MD004: + style: dash + +# Ordered list item prefix +MD029: + style: one diff --git a/.github/linters/.yaml-lint.yml b/.github/linters/.yaml-lint.yml new file mode 100644 index 0000000..c975a33 --- /dev/null +++ b/.github/linters/.yaml-lint.yml @@ -0,0 +1,10 @@ +rules: + document-end: disable + document-start: + level: warning + present: false + line-length: + level: warning + max: 80 + allow-non-breakable-words: true + allow-non-breakable-inline-mappings: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..086d520 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +name: Continuous Integration + +on: + pull_request: + push: + branches: + - main + +permissions: + contents: read + +jobs: + test-docker: + name: Docker Tests + runs-on: ubuntu-latest + + # Run a local registry to push to + services: + registry: + image: registry:2 + ports: + - 5001:5000 + + env: + TEST_TAG: localhost:5001/actions/hello-world-docer-action:latest + + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Setup Docker BuildX + id: setup-buildx + uses: docker/setup-buildx-action@v3 + with: + install: true + driver-opts: network=host + + - name: Build the Container + id: build + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ env.TEST_TAG }} + + - name: Run the Container + id: run + env: + INPUT_WHO_TO_GREET: Mona Lisa Octocat + run: | + docker run \ + --env INPUT_WHO_TO_GREET="${{ env.INPUT_WHO_TO_GREET }}" \ + --rm ${{ env.TEST_TAG }} + + test-action: + name: GitHub Actions Test + runs-on: ubuntu-latest + + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Test Local Action + id: test-action + uses: ./ + with: + who-to-greet: Mona Lisa Octocat + + - name: Print Output + id: output + run: echo "${{ steps.test-action.outputs.time }}" diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml new file mode 100644 index 0000000..6eec65e --- /dev/null +++ b/.github/workflows/linter.yml @@ -0,0 +1,30 @@ +name: Lint Codebase + +on: + pull_request: + push: + branches: + - main + +permissions: + contents: read + packages: read + statuses: write + +jobs: + lint: + name: Lint Codebase + runs-on: ubuntu-latest + + steps: + - name: Checkout + id: checkout + uses: actions/checkout@v4 + + - name: Lint Codebase + id: super-linter + uses: super-linter/super-linter/slim@v5 + env: + DEFAULT_BRANCH: main + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + VALIDATE_ALL_CODEBASE: true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dcff431 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# dotenv environment variables file +.env +.env.test + +# OS metadata +.DS_Store +Thumbs.db + +# IDE files +.idea +.vscode +*.code-workspace diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 0000000..a378146 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,16 @@ +{ + "printWidth": 80, + "tabWidth": 2, + "useTabs": false, + "semi": false, + "singleQuote": true, + "quoteProps": "as-needed", + "jsxSingleQuote": false, + "trailingComma": "none", + "bracketSpacing": true, + "bracketSameLine": true, + "arrowParens": "avoid", + "proseWrap": "always", + "htmlWhitespaceSensitivity": "css", + "endOfLine": "lf" +} diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 0000000..a9802d7 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,4 @@ +# Repository CODEOWNERS + +* @actions/actions-runtime +* @ncalteen diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..6b92e63 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,11 @@ +# Set the base image to use for subsequent instructions +FROM alpine:3.18 + +# Set the working directory inside the container +WORKDIR /usr/src + +# Copy any source file(s) required for the action +COPY entrypoint.sh . + +# Configure the container to be run as an executable +ENTRYPOINT ["/usr/src/entrypoint.sh"] diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..5f9e342 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright GitHub + +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. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..9f7ac3d --- /dev/null +++ b/README.md @@ -0,0 +1,111 @@ +# Hello, World! Docker Action + +[![GitHub Super-Linter](https://github.com/actions/hello-world-docker-action/actions/workflows/linter.yml/badge.svg)](https://github.com/super-linter/super-linter) +![CI](https://github.com/actions/hello-world-docker-action/actions/workflows/ci.yml/badge.svg) + +This action prints `Hello, World!` or `Hello, !` to the log. To +learn how this action was built, see +[Creating a Docker container action](https://docs.github.com/en/actions/creating-actions/creating-a-docker-container-action). + +## Create Your Own Action + +To create your own action, you can use this repository as a template! Just +follow the below instructions: + +1. Click the **Use this template** button at the top of the repository +1. Select **Create a new repository** +1. Select an owner and name for your new repository +1. Click **Create repository** +1. Clone your new repository + +> [!CAUTION] +> +> Make sure to remove or update the [`CODEOWNERS`](./CODEOWNERS) file! For +> details on how to use this file, see +> [About code owners](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners). + +## Usage + +Here's an example of how to use this action in a workflow file: + +```yaml +name: Example Workflow + +on: + workflow_dispatch: + inputs: + who-to-greet: + description: Who to greet in the log + required: true + default: 'World' + type: string + +jobs: + say-hello: + name: Say Hello + runs-on: ubuntu-latest + + steps: + # Change @main to a specific commit SHA or version tag, e.g.: + # actions/hello-world-docker-action@e76147da8e5c81eaf017dede5645551d4b94427b + # actions/hello-world-docker-action@v1.2.3 + - name: Print to Log + id: print-to-log + uses: actions/hello-world-docker-action@main + with: + who-to-greet: ${{ inputs.who-to-greet }} +``` + +For example workflow runs, check out the +[Actions tab](https://github.com/actions/hello-world-docker-action/actions)! +:rocket: + +## Inputs + +| Input | Default | Description | +| -------------- | ------- | ------------------------------- | +| `who-to-greet` | `World` | The name of the person to greet | + +## Outputs + +| Output | Description | +| ------ | ----------------------- | +| `time` | The time we greeted you | + +## Test Locally + +After you've cloned the repository to your local machine or codespace, you'll +need to perform some initial setup steps before you can test your action. + +> [!NOTE] +> +> You'll need to have a reasonably modern version of +> [Docker](https://www.docker.com/get-started/) handy (e.g. docker engine +> version 20 or later). + +1. :hammer_and_wrench: Build the container + + Make sure to replace `actions/hello-world-docker-action` with an appropriate + label for your container. + + ```bash + docker build -t actions/hello-world-docker-action . + ``` + +1. :white_check_mark: Test the container + + You can pass individual environment variables using the `--env` or `-e` flag. + + ```bash + $ docker run --env INPUT_WHO_TO_GREET="Mona Lisa Octocat" actions/hello-world-docker-action + ::notice file=entrypoint.sh,line=7::Hello, Mona Lisa Octocat! + ``` + + Or you can pass a file with environment variables using `--env-file`. + + ```bash + $ echo "INPUT_WHO_TO_GREET=\"Mona Lisa Octocat\"" > ./.env.test + + $ docker run --env-file ./.env.test actions/hello-world-docker-action + ::notice file=entrypoint.sh,line=7::Hello, Mona Lisa Octocat! + ``` diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..f85ef94 --- /dev/null +++ b/action.yml @@ -0,0 +1,21 @@ +name: Hello, World! +description: Greet someone and record the time +author: GitHub Actions + +# Define your inputs here. +inputs: + who-to-greet: + description: Who to greet + required: true + default: World + +# Define your outputs here. +outputs: + time: + description: The time we greeted you + +runs: + using: docker + image: Dockerfile + env: + INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }} diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100755 index 0000000..22c9865 --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,12 @@ +#!/bin/sh -l + +# Use INPUT_ to get the value of an input +GREETING="Hello, $INPUT_WHO_TO_GREET!" + +# Use workflow commands to do things like set debug messages +echo "::notice file=entrypoint.sh,line=7::$GREETING" + +# Write outputs to the $GITHUB_OUTPUT file +echo "greeting=$GREETING" >> "$GITHUB_OUTPUT" + +exit 0