From 5c1ab6e60b46de7a184e1d48be414ec911fc0c9e Mon Sep 17 00:00:00 2001 From: Andy Augustin Date: Tue, 5 Mar 2024 20:25:45 +0100 Subject: [PATCH] feat(#467): :sparkles: option to set hooks directly hooks can be configured directly within the workflow efinition --- README.md | 26 +++++++++++++++++++++++--- action.yml | 3 +++ src/sync_common.sh | 3 ++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index bc4f6d2e..5acd5918 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,7 @@ jobs: | hostname | `[optional]` the hostname of the repository | `false` | `github.com` | | is_dry_run | `[optional]` set to `true` if you do not want to push the changes and not want to create a PR | `false` | | | is_allow_hooks | `[optional]` set to `true` if you want to enable lifecycle hooks. Use this with caution! | `false` | `false` | +| hooks | `[optional]` please check the lifecycle hooks section below | `false` | | | is_pr_cleanup | `[optional]` set to `true` if you want to cleanup older PRs targeting the same branch. Use this with caution! | `false` | `false` | | is_not_source_github | `[optional]` set to `true` if the source git provider is not GitHub | `false` | `false` | | is_force_deletion | `[optional]` set to `true` if you want to force delete files which are deleted within the source repository even if they contain changes. You need to also adjust `git_remote_pull_params` (see below for details) | `false` | `false` | @@ -373,7 +374,8 @@ jobs: Different lifecycle hooks are supported. You need to enable the functionality with the option `is_allow_hooks` and set it to `true` :warning: use this functionality with caution. You can use one of the available docker images to test it out. **With great power comes great responsibility**. -In addition, you need a configuration file with the name `templatesync.yml` within the root of the target repository. +In addition, you need either a configuration file with the name `templatesync.yml` within the root of the target repository +or you set the hooks input parameter within the action definition with a related yaml string The following hooks are supported (please check [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for a better understanding of the lifecycles). @@ -387,7 +389,26 @@ The following hooks are supported (please check [docs/ARCHITECTURE.md](docs/ARCH **Remark** The underlying OS is defined by an Alpine container. E.q. for the installation phase you need to use commands like `apk add --update --no-cache python3` -Schema and example for the `templatesync.yml` +### Example for the hooks input parameter + +```yml +- name: Test action step + uses: AndreasAugustin/actions-template-sync@v1 + env: + MY_VAR: "foo" # possible to define envrionment variables + with: + source_repo_path: AndreasAugustin/template.git + upstream_branch: main + is_dry_run: true + is_allow_hooks: true + hooks: > + prepull: + commands: + - echo 'hi, we are within the prepull phase' + - echo 'maybe you want to do adjustments on the local code' +``` + +### Schema and example for the `templatesync.yml` **Remark** It is possible to use environment variables within the github action definition usable within the command configuration, e.g. @@ -397,7 +418,6 @@ Schema and example for the `templatesync.yml` env: MY_VAR: "foo" # possible to define envrionment variables with: - github_token: ${{ secrets.GITHUB_TOKEN }} source_repo_path: AndreasAugustin/template.git upstream_branch: main is_dry_run: true diff --git a/action.yml b/action.yml index 41e2f6d4..3bb3e6f2 100644 --- a/action.yml +++ b/action.yml @@ -40,6 +40,8 @@ inputs: is_allow_hooks: description: "[optional] set to true if you want to allow hooks. Use this functionality with caution!" default: "false" + hooks: + description: "[optional] define the hooks as yaml string input" is_pr_cleanup: description: "[optional] set to true if you want to cleanup older PRs targeting the same branch." default: "false" @@ -74,6 +76,7 @@ runs: HOSTNAME: ${{ inputs.hostname }} IS_DRY_RUN: ${{ inputs.is_dry_run }} IS_ALLOW_HOOKS: ${{ inputs.is_allow_hooks }} + HOOKS: ${{ inputs.hooks }} IS_PR_CLEANUP: ${{ inputs.is_pr_cleanup}} IS_NOT_SOURCE_GITHUB: ${{ inputs.is_not_source_github }} IS_FORCE_DELETION: ${{ inputs.is_force_deletion }} diff --git a/src/sync_common.sh b/src/sync_common.sh index 7d290366..a51274dd 100755 --- a/src/sync_common.sh +++ b/src/sync_common.sh @@ -60,7 +60,8 @@ function cmd_from_yml_file() { err "yaml query yq is not installed. 'https://mikefarah.gitbook.io/yq/'"; exit 1; fi - readarray cmd_Arr < <(yq "${YML_PATH} | .[]" "${FILE_NAME}") + # readarray cmd_Arr < <(yq "${YML_PATH} | .[]" "${FILE_NAME}") + readarray cmd_Arr < <(yq "${YML_PATH} | .[]" "env(HOOKS)") for key in "${cmd_Arr[@]}"; do echo "${key}" | bash; done fi