-
Notifications
You must be signed in to change notification settings - Fork 0
131 lines (116 loc) · 4.06 KB
/
sync-from-template.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
---
#
# - Run this workflow to pull changes from the template repository.
#
# - Clone this repository. Check out a branch
# - Copy files from the template onto this clone
# - Push the branch to this repository
# - Create a pull request in this repository
#
name: Sync changes from template
# TODO:
# - Switch to gh. Check https://github.com/cli/cli/issues/297 for updates
on:
# Run at 0517 UTC each Friday
schedule:
- cron: "17 5 * * 5"
# Run when this file changes
push:
paths:
- .github/workflows/sync-from-template.yaml
# Run when manually triggered
workflow_dispatch:
env:
MAIN_BRANCH: main
BASE_BRANCH: develop
HEAD_BRANCH: chore/sync-from-template
GIT_AUTHOR_NAME: ${{ github.repository_owner }}
GIT_AUTHOR_EMAIL: ${{ github.repository_owner }}@users.noreply.github.com
REPO_TEMPLATE: RISC-OS-Community/StandardRepoTemplate
THIS_REPO: ${{ github.repository }}
jobs:
sync-from-template:
# Do not run on the template repository itself
if: github.repository != 'RISC-OS-Community/StandardRepoTemplate'
name: Sync changes from RISC-OS-Community/StandardRepoTemplate
runs-on: ubuntu-latest
continue-on-error: true
permissions:
actions: write
pull-requests: write
contents: write
repository-projects: write
steps:
# Clone the template repository
- name: Check out template repository
uses: actions/checkout@v2
with:
repository: ${{ env.REPO_TEMPLATE }}
token: ${{ github.token }}
path: ${{ env.REPO_TEMPLATE }}
ref: main
# Configure git globals
#- name: Configure git globals
# run: |
# git config --global init.defaultBranch ${MAIN_BRANCH}
# Clone the target repository. Check out a branch
- name: Check out ${{ github.repository }}
uses: actions/checkout@v2
with:
repository: ${{ github.repository }}
token: ${{ github.token }}
path: ${{ github.repository }}
ref: main
- name: Create branch in ${{ env.THIS_REPO }}
run: |
git -C "${THIS_REPO}" fetch origin "${HEAD_BRANCH}" || true
git -C "${THIS_REPO}" branch -a
git -C "${THIS_REPO}" checkout -B "${HEAD_BRANCH}" \
"remotes/origin/${HEAD_BRANCH}" || \
git -C "${THIS_REPO}" checkout -b "${HEAD_BRANCH}"
# Copy files from the template onto the target clone
- name: Copy template contents
run: |
_files="$(find ${REPO_TEMPLATE} \
! -path "*/.git/*" \
! -name ".gitignore" \
! -path "*/.github/workflows/*" \
! -name "README.md" \
-type f \
-print)"
for _file in ${_files}; do
_src="${_file}"
_dst="${THIS_REPO}/${_file#${REPO_TEMPLATE}/}"
# TODO: Find a more robust / elegant way to get this :point_down:
_dst="${_dst%/*}/"
mkdir -p "${_dst}"
echo "INFO: Copy '${_src}' to '${_dst}'."
cp "${_src}" "${_dst}"
done
git -C "${THIS_REPO}" diff
# Commit changes, if there are any
- name: Commit changes, if any
run: |
git -C ${THIS_REPO} config user.name "${GIT_AUTHOR_NAME}"
git -C ${THIS_REPO} config \
user.email "${GIT_AUTHOR_EMAIL}"
git -C ${THIS_REPO} add .
git -C ${THIS_REPO} commit \
-m "Sync from template@${{ github.sha }}"
# Push the branch to the target repository
- name: Push topic branch
run: git -C ${THIS_REPO} push -u origin "${HEAD_BRANCH}"
# Create a pull request in the target repository
- name: Create pull request
env:
GITHUB_TOKEN: ${{ github.token }}
GITHUB_USER: ${{ github.actor }}
run: |
pushd ${THIS_REPO}
hub pull-request \
-b "${BASE_BRANCH}" \
-h "${HEAD_BRANCH}" \
--no-edit \
-m "Pull updates from ${REPO_TEMPLATE}" \
-m "Pull updates from ${REPO_TEMPLATE}"
popd