Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
d1717e2
feat(gh-auth): add gh auth login and credential helper
Dec 8, 2022
4c18507
feat(gh-auth): add own source_repo_github_token handling for template…
Dec 23, 2022
3590d73
chore(): add test for PAT :rocket:
AndreasAugustin Dec 27, 2022
9b74224
chore(gh-cli): update gh cli version to latest :rocket:
AndreasAugustin Dec 28, 2022
edc9216
# This is a combination of 6 commits.
AndreasAugustin Dec 28, 2022
7c68c1c
parent 9b742247ad7218490f30978af7abf4d6fc4ed9ad
AndreasAugustin Jan 1, 2023
809ebe2
feat(gh-auth): add gh auth login and credential helper
Dec 8, 2022
cc55738
feat(gh-auth): add own source_repo_github_token handling for template…
Dec 23, 2022
a06016d
fix(merge): fix merge conflicts
Jan 2, 2023
561434a
Merge branch 'feat/use_gh_auth_for_authentication' into feat/enable_g…
AndreasAugustin Jan 2, 2023
1b2dd57
fix(): small logic fix in script
AndreasAugustin Jan 2, 2023
f274056
fix(): small logic fix in script
AndreasAugustin Jan 2, 2023
42728fc
feat(): #238 hopefully a final version :rocket:
AndreasAugustin Jan 2, 2023
abd4251
feat(): #238 hopefully a final version :rocket:
AndreasAugustin Jan 2, 2023
7f15131
feat(): #238 hopefully a final version :rocket:
AndreasAugustin Jan 2, 2023
0419389
feat(): #238 hopefully a final version :rocket:
AndreasAugustin Jan 2, 2023
69f59a2
feat(): #238 hopefully a final version :rocket:
AndreasAugustin Jan 2, 2023
0264978
Update test_ssh.yml
AndreasAugustin Jan 2, 2023
33baa75
Update test.yml
AndreasAugustin Jan 2, 2023
ed6009a
Update entrypoint.sh
AndreasAugustin Jan 2, 2023
a2527a0
fix(): fix for GITHUB_TOKEN env variable :bug:
AndreasAugustin Jan 3, 2023
1435ce1
fix(): fix for GITHUB_TOKEN env variable :bug:
AndreasAugustin Jan 3, 2023
ad14823
Merge pull request #1 from AndreasAugustin/feat/enable_git_app
msiebeneicher Jan 3, 2023
fec865c
chore: code clean up
Jan 3, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@ jobs:

steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
-
name: Checkout
uses: actions/checkout@v3
- name: Test action step
-
name: Test action step
uses: ./ # Uses an action in the root directory
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
25 changes: 25 additions & 0 deletions .github/workflows/test_pat.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: test-pat

on:
pull_request:
push:
# manual trigger
workflow_dispatch:

jobs:
test-implementation-job:

runs-on: ubuntu-latest

steps:
# To use this repository's private action, you must check out the repository
-
name: Checkout
uses: actions/checkout@v3
-
name: Test action step PAT
uses: ./ # Uses an action in the root directory
with:
github_token: ${{ secrets.SOURCE_REPO_PAT }}
source_repo_path: ${{ secrets.SOURCE_REPO_PATH_TEST }} # <owner/repo>, should be within secrets
is_dry_run: true
6 changes: 4 additions & 2 deletions .github/workflows/test_ssh.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,11 @@ jobs:

steps:
# To use this repository's private action, you must check out the repository
- name: Checkout
-
name: Checkout
uses: actions/checkout@v3
- name: Test action step ssh
-
name: Test action step ssh
uses: ./ # Uses an action in the root directory
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
Expand Down
9 changes: 7 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@
######################################
FROM alpine:3.17.0 as dev

ARG GH_CLI_VER=2.15.0
ARG GH_CLI_VER=2.21.1

# install packages
RUN apk add --update --no-cache bash make git zsh curl tmux musl openssh git-lfs
RUN apk add --update --no-cache bash make git zsh curl tmux musl openssh git-lfs vim

RUN wget https://github.com/cli/cli/releases/download/v${GH_CLI_VER}/gh_${GH_CLI_VER}_linux_386.tar.gz -O ghcli.tar.gz
RUN tar --strip-components=1 -xf ghcli.tar.gz
Expand All @@ -17,6 +17,11 @@ RUN echo "set-option -g default-shell /bin/zsh" >> /root/.tmux.conf
# install oh-my-zsh
RUN sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

ADD src/*.sh /bin/
RUN chmod +x /bin/entrypoint.sh \
&& chmod +x /bin/sync_template.sh \
&& chmod +x /bin/sync_common.sh

RUN mkdir -p /root/.ssh \
&& ssh-keyscan -t rsa github.com >> /root/.ssh/known_hosts

Expand Down
32 changes: 31 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,33 @@ You can use all [triggers][action-triggers] which are supported for GitHub actio

If you have a private template repository.

#### Using github app

You can create and use a [GitHub App][github-app] to handle the access to your private repository.
To generate a token for your app you can use a separate action like [tibdex/github-app-token][github-app-token].

```yaml
jobs:
repo-sync:
runs-on: ubuntu-latest

steps:
- name: Generate token to read from source repo # see: https://github.com/tibdex/github-app-token
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}

- name: actions-template-sync
uses: AndreasAugustin/[email protected]
with:
github_token: ${{ steps.generate_token.outputs.token }}
source_repo_path: <owner/repo>
upstream_branch: <target_branch> # defaults to main
pr_labels: <label1>,<label2>[,...] # optional, no default
```

#### SSH

You have various options to use ssh keys with GitHub.
Expand Down Expand Up @@ -115,7 +142,7 @@ jobs:

## Ignore Files

Create a `.templatesyncignore` file. Just like writing a `.gitignore` file, follow the [glob pattern](https://en.wikipedia.org/wiki/Glob_(programming))
Create a `.templatesyncignore` file. Just like writing a `.gitignore` file, follow the [glob pattern][glob-pattern]
in defining the files and folders that should be excluded from syncing with the template repository.

It can also be stored inside `.github` folder.
Expand Down Expand Up @@ -184,3 +211,6 @@ specification. Contributions of any kind welcome!
[pr-labels]: https://docs.github.com/en/issues/using-labels-and-milestones-to-track-work/managing-labels
[devto-example]: https://dev.to/andreasaugustin/github-actions-template-sync-1g9k
[github-example]: https://github.com/AndreasAugustin/teaching/blob/main/docs/git/git_action_sync.md
[github-app]: https://docs.github.com/en/developers/apps/getting-started-with-apps/about-apps#about-github-apps
[glob-pattern]: https://en.wikipedia.org/wiki/Glob_(programming)
[github-app-token]: https://github.com/tibdex/github-app-token
2 changes: 1 addition & 1 deletion src/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
FROM alpine:3.17.0

ARG GH_CLI_VER=2.15.0
ARG GH_CLI_VER=2.21.1

# TODO(anau) change user
ARG GITHUB_URL="https://github.com/AndreasAugustin/actions-template-sync"
Expand Down
19 changes: 12 additions & 7 deletions src/entrypoint.sh
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,21 @@ set -x
# shellcheck source=src/sync_common.sh
source sync_common.sh

[ -z "${GITHUB_TOKEN}" ] && {
err "Missing input 'github_token: \${{ secrets.GITHUB_TOKEN }}'.";
exit 1;
};
if [[ -z "${GITHUB_TOKEN}" ]]; then
err "Missing input 'github_token: \${{ secrets.GITHUB_TOKEN }}'.";
exit 1;
fi

if [[ -z "${SOURCE_REPO_PATH}" ]]; then
err "Missing input 'source_repo_path: \${{ input.source_repo_path }}'.";
exit 1
fi

SOURCE_REPO_HOSTNAME="${HOSTNAME:-github.com}"
DEFAULT_REPO_HOSTNAME="github.com"
SOURCE_REPO_HOSTNAME="${HOSTNAME:-${DEFAULT_REPO_HOSTNAME}}"

# In case of private template repository this will be overwritten
SOURCE_REPO_PREFIX="https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@${SOURCE_REPO_HOSTNAME}/"
# In case of ssh template repository this will be overwritten
SOURCE_REPO_PREFIX="https://${SOURCE_REPO_HOSTNAME}/"

function ssh_setup() {
echo "::group::ssh setup"
Expand All @@ -41,6 +42,8 @@ function ssh_setup() {
# 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}"
Expand All @@ -55,6 +58,8 @@ function git_init() {
git config --global --add safe.directory /github/workspace
git lfs install

gh auth setup-git --hostname "${SOURCE_REPO_HOSTNAME}"
gh auth status --hostname "${SOURCE_REPO_HOSTNAME}"
echo "::endgroup::"
}

Expand Down
4 changes: 3 additions & 1 deletion src/sync_template.sh
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ echo "::group::Pull template"
debug "create new branch from default branch with name ${NEW_BRANCH}"
git checkout -b "${NEW_BRANCH}"
debug "pull changes from template"

# TODO(anau) eventually make squash optional
git pull "${SOURCE_REPO}" --allow-unrelated-histories --squash --strategy=recursive -X theirs
echo "::endgroup::"
Expand Down Expand Up @@ -103,7 +104,8 @@ echo "::endgroup::"

push_and_create_pr () {
if [ "$IS_DRY_RUN" != "true" ]; then
echo "::group::push changes and create PR"

echo "::group::push changes and create PR"
debug "push changes"
git push --set-upstream origin "${NEW_BRANCH}"

Expand Down