Skip to content

Commit

Permalink
Merge branch 'main' into feat/gpg_sign_pwd
Browse files Browse the repository at this point in the history
  • Loading branch information
AndreasAugustin committed Mar 5, 2024
2 parents 21ac0d2 + d9e61fc commit cbb8538
Show file tree
Hide file tree
Showing 6 changed files with 160 additions and 88 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## [1.10.0](https://github.com/AndreasAugustin/actions-template-sync/compare/v1.9.0...v1.10.0) (2024-03-05)


### Features

* **#467:** :sparkles: hooks now within action inputs ([#489](https://github.com/AndreasAugustin/actions-template-sync/issues/489)) ([0e55c08](https://github.com/AndreasAugustin/actions-template-sync/commit/0e55c08f95f9a83c60f809fa6b49785187ec7623))

## [1.9.0](https://github.com/AndreasAugustin/actions-template-sync/compare/v1.8.1...v1.9.0) (2024-03-05)


Expand Down
28 changes: 23 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` |
Expand Down Expand Up @@ -374,7 +375,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).

Expand All @@ -388,17 +390,33 @@ 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`

**Remark** It is possible to use environment variables within the github action definition usable within the command configuration, e.g.
### 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:
github_token: ${{ secrets.GITHUB_TOKEN }}
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.

```yml
- name: Test action step
uses: AndreasAugustin/actions-template-sync@v1
with:
source_repo_path: AndreasAugustin/template.git
upstream_branch: main
is_dry_run: true
Expand Down
3 changes: 3 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -76,6 +78,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 }}
Expand Down
36 changes: 26 additions & 10 deletions src/entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ set -e
# shellcheck source=src/sync_common.sh
source sync_common.sh

###########################################
# Precheks
##########################################

if [[ -z "${GITHUB_TOKEN}" ]]; then
err "Missing input 'github_token: \${{ secrets.GITHUB_TOKEN }}'.";
exit 1;
Expand All @@ -16,6 +20,10 @@ if [[ -z "${SOURCE_REPO_PATH}" ]]; then
exit 1
fi

############################################
# Variables
############################################

DEFAULT_REPO_HOSTNAME="github.com"
SOURCE_REPO_HOSTNAME="${HOSTNAME:-${DEFAULT_REPO_HOSTNAME}}"
GIT_USER_NAME="${GIT_USER_NAME:-${GITHUB_ACTOR}}"
Expand All @@ -24,6 +32,10 @@ GIT_USER_EMAIL="${GIT_USER_EMAIL:-github-action@actions-template-sync.noreply.${
# In case of ssh template repository this will be overwritten
SOURCE_REPO_PREFIX="https://${SOURCE_REPO_HOSTNAME}/"

################################################
# Functions
################################################

function ssh_setup() {
echo "::group::ssh setup"

Expand Down Expand Up @@ -53,18 +65,9 @@ function gpg_setup() {
git config --global gpg.program /bin/gpg_no_tty.sh

info "done prepare gpg"
echo "::endgroup::"for fpr in
echo "::endgroup::"
}

# Forward to /dev/null to swallow the output of the private key
if [[ -n "${SSH_PRIVATE_KEY_SRC}" ]] &>/dev/null; then
ssh_setup
elif [[ "${SOURCE_REPO_HOSTNAME}" != "${DEFAULT_REPO_HOSTNAME}" ]]; then
gh auth login --git-protocol "https" --hostname "${SOURCE_REPO_HOSTNAME}" --with-token <<< "${GITHUB_TOKEN}"
fi

export SOURCE_REPO="${SOURCE_REPO_PREFIX}${SOURCE_REPO_PATH}"

function git_init() {
echo "::group::git init"
info "set git global configuration"
Expand All @@ -86,6 +89,19 @@ function git_init() {
echo "::endgroup::"
}

###################################################
# Logic
###################################################

# Forward to /dev/null to swallow the output of the private key
if [[ -n "${SSH_PRIVATE_KEY_SRC}" ]] &>/dev/null; then
ssh_setup
elif [[ "${SOURCE_REPO_HOSTNAME}" != "${DEFAULT_REPO_HOSTNAME}" ]]; then
gh auth login --git-protocol "https" --hostname "${SOURCE_REPO_HOSTNAME}" --with-token <<< "${GITHUB_TOKEN}"
fi

export SOURCE_REPO="${SOURCE_REPO_PREFIX}${SOURCE_REPO_PATH}"

git_init

if [[ -n "${GPG_PRIVATE_KEY}" ]] &>/dev/null; then
Expand Down
20 changes: 16 additions & 4 deletions src/sync_common.sh
Original file line number Diff line number Diff line change
Expand Up @@ -41,15 +41,15 @@ function info() {
}

#######################################
# Executes commands defined within yml file
# Executes commands defined within yml file or env variable
# Arguments:
# hook -> the hook to use
#
####################################3#
function cmd_from_yml_file() {
function cmd_from_yml() {
local FILE_NAME="templatesync.yml"
local HOOK=$1
local YML_PATH=".hooks.${HOOK}.commands"
local YML_PATH_SUFF=".${HOOK}.commands"

if [ "$IS_ALLOW_HOOKS" != "true" ]; then
debug "execute cmd hooks not enabled"
Expand All @@ -60,7 +60,19 @@ 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}")

if [[ -n "${HOOKS}" ]]; then
debug "hooks input variable is set. Using the variable"
echo "${HOOKS}" > "tmp.${FILE_NAME}"
YML_PATH="${YML_PATH_SUFF}"
else
cp ${FILE_NAME} "tmp.${FILE_NAME}"
YML_PATH=".hooks${YML_PATH_SUFF}"
fi

readarray cmd_Arr < <(yq "${YML_PATH} | .[]" "tmp.${FILE_NAME}")

rm "tmp.${FILE_NAME}"

for key in "${cmd_Arr[@]}"; do echo "${key}" | bash; done
fi
Expand Down
Loading

0 comments on commit cbb8538

Please sign in to comment.