diff --git a/.env b/.env new file mode 100644 index 0000000..bad1ef2 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +echo "{name}={value}" >> "$GITHUB_OUTPUT" +echo "{environment_variable_name}={value}" >> "$GITHUB_ENV" \ No newline at end of file diff --git a/.github/workflows/DevelopInBranch.yml b/.github/workflows/DevelopInBranch.yml new file mode 100644 index 0000000..f48823b --- /dev/null +++ b/.github/workflows/DevelopInBranch.yml @@ -0,0 +1,27 @@ +# workflow to show how to develop workflows in branches +name: Develop in a branch +on: [pull_request, workflow_dispatch] + +jobs: + job1: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + steps: + - run: | + echo "Workflow triggered in branch '${{ github.ref }}'." + echo "Workflow triggered by event '${{ github.event_name }}'." + echo "Workflow triggered by actor '${{ github.actor }}''." + # - uses: actions/checkout@v4.2.2 + # - uses: devops-actions/actionlint@v0.1.3 + # - run: echo "PR title is '${{ github.event.pull_request.title }}'." + - run: | + echo "::debug::This is a debug message." + echo "::notice::This is a notice message." + echo "::warning::This is a warning message." + echo "::error::This is an error message." + - run: | + echo "::notice file=.github/workflows/DevelopInBranch.yml,line=19,col=11,endColumn=51::There is a debug message that is not always visible!" + echo "::warning file=.github/workflows/DevelopInBranch.yml,line=19,endline=21::A lot of messages" + echo "::error title=Script Injection,file=.github/workflows/DevelopInBranch.yml,line=13,col=37,endColumn=68::Potential script injection" \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..5a85067 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,24 @@ +name: Action CI +on: [push] + +jobs: + ci: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4.2.2 + - name: Run my own container action + id: my-action + uses: ./ + with: + who-to-greet: '@howsen82' + - name: Test the container + if: ${{ steps.my-action.outputs.answer != 42 }} + run: | + echo "::error file=entrypoint.sh,line=4,title=Error in container::The answer was not expected" + exit 1 + - name: Set the value + id: step_one + run: | + echo "action_state=yellow" >> "$GITHUB_ENV" + - run: | + echo "${{ env.action_state }}" # This will output 'yellow' \ No newline at end of file diff --git a/03. Building GitHub Actions.md b/03. Building GitHub Actions.md index ea01b7b..e7f8131 100644 --- a/03. Building GitHub Actions.md +++ b/03. Building GitHub Actions.md @@ -633,7 +633,7 @@ I haven’t included a recipe for adjusting the unit tests in this book as this npm run bundle git add . git commit -m "Fail CI build" - git push –set-upstream origin fail-ci-build + git push --set-upstream origin fail-ci-build gh pr create --fill ``` diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..262fef3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +# Container image that runs your code +# FROM alpine:latest +# CMD echo "Hello World" +FROM alpine:3.21 + +COPY entrypoint.sh /entrypoint.sh + +RUN chmod +x entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] + +# docker run $(docker build -q .) \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..44a6b3d --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# DockerActionRecipe + +A Docker container actions that handles input and output writes a job summary. + +## Inputs + +## `who-to-greet` + +**Required** The name of the person to greet. Default `"World"`. + +## Outputs + +## `answer` + +The answer to the ultimate question of life, the universe, and everything. + +## Usage + +```yaml +- uses: howsen82/DockerActionRecipe@v1.0 + with: + # Required: the person to greet with the action + # Default: World + who-to-greet: '' +``` + +## Examples + +### Simple example + +```yaml +- uses: howsen82/DockerActionRecipe@v1.0 + with: + who-to-greet: 'Steven Leong' +``` + +### Example that uses the output parameter + +```yaml +- uses: howsen82/DockerActionRecipe@v1.0 + id: my-action + with: + who-to-greet: 'Steven Leong' + +- name: Output the answer + run: echo "The answer is '${{ steps.my-action.outputs.answer }}'" +``` \ No newline at end of file diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..58584dc --- /dev/null +++ b/action.yml @@ -0,0 +1,23 @@ +name: 'Docker Action Recipe' +description: 'Greet someone' + +branding: + icon: bell + color: purple +author: 'Steven Leong' + +inputs: + who-to-greet: + description: 'Who to greet' + required: true + default: 'World' + +outputs: + answer: + description: 'The answer to everything (always 42)' + +runs: + using: 'docker' + image: 'Dockerfile' + args: + - ${{ inputs.who-to-greet }} \ No newline at end of file diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 0000000..213549d --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,5 @@ +#!/bin/sh -l +echo "Hello $@" +echo "answer=7" >> $GITHUB_OUTPUT +echo "### Hello $@! :rocket:" >> $GITHUB_STEP_SUMMARY +echo "

The answer from Deep Thought is 42 :robot:

" >> $GITHUB_STEP_SUMMARY \ No newline at end of file