Skip to content

Merge pull request #4 from RedEyeMods/updated/template/action-template #7

Merge pull request #4 from RedEyeMods/updated/template/action-template

Merge pull request #4 from RedEyeMods/updated/template/action-template #7

name: Settings Sync
on:
workflow_dispatch:
push:
branches:
- main
jobs:
get-template-repo:
name: Parent Template Repository
runs-on: ubuntu-latest
outputs:
template_repository: ${{ steps.data-interpreter.outputs.TEMPLATE_REPO_JSON }}
steps:
- uses: actions/checkout@v4
- name: Restore Cached Org Data
id: cache-repo
uses: actions/cache@v4
with:
path: |
org-data.txt
key: json-org-data
- name: Get Organization Data
if: steps.cache-repo.outputs.cache-hit != 'true'
id: org-grab
uses: actions/github-script@v7
with:
github-token: ${{ secrets.ORG_PAT }}
script: |
const fs = require('fs');
var request = await github.rest.repos.get({
...context.repo
});
if (request.status != 200)
throw new Exception('Bad API response: ' + request.status);
var dataStringified = JSON.stringify(request.data.template_repository == undefined ? {} : request.data.template_repository);
console.log(dataStringified);
fs.writeFileSync('org-data.txt', dataStringified);
- id: data-interpreter
run: |
echo 'TEMPLATE_REPO_JSON<<EOF' >> $GITHUB_OUTPUT
cat org-data.txt >> $GITHUB_OUTPUT
echo '\n' >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
check-diff:
needs: get-template-repo
if: ${{ fromJson(needs.get-template-repo.outputs.template_repository).full_name != '' }}
runs-on: ubuntu-latest
outputs:
COMPLIANCE_CHANGED: ${{ steps.filter.outputs.compliance }}
steps:
- uses: actions/checkout@v4
- uses: dorny/paths-filter@v3
id: filter
with:
base: main
filters: |
compliance:
- '.github/workflows/organization-compliance.yml'
run-init:
name: Repository Settings Synchronization
needs: [ 'check-diff', 'get-template-repo' ]
if: ${{ needs.check-diff.outputs.COMPLIANCE_CHANGED == 'true' }}
runs-on: ubuntu-latest
env:
CUR_REPO: ${{ github.repository }}
SOURCE_REPO: ${{ fromJson(needs.get-template-repo.outputs.template_repository).full_name }}
steps:
- name: Copy On Rulesets
uses: RedEyeMods/[email protected]
with:
owner-token: ${{ secrets.ORG_PAT }}
source-repo: ${{ env.SOURCE_REPO }}
regex-filter: '✓+.*'
ruleset-enabled: true
overwrite: true
- name: Copy Off Rulesets
uses: RedEyeMods/[email protected]
with:
owner-token: ${{ secrets.ORG_PAT }}
source-repo: ${{ env.SOURCE_REPO }}
regex-filter: '✗+.*'
ruleset-enabled: false
overwrite: true
- name: Copy Labels
uses: RedEyeMods/[email protected]
with:
token: ${{ secrets.ORG_PAT }}
source-repo: ${{ env.SOURCE_REPO }}
- name: Copy Misc Settings
uses: actions/github-script@v7
with:
github-token: ${{ secrets.ORG_PAT }}
script: |
async function main() {
const [currentOwner, currentRepo] = process.env.CUR_REPO.split('/');
const [targetOwner, targetRepo] = process.env.TARGET_REPO.split('/');
const defProtRules = await github.rest.repos.get({
owner: targetOwner, repo: targetRepo
});
await github.rest.repos.update({
owner: currentOwner, repo: currentRepo,
allow_squash_merge: defProtRules.data.allow_squash_merge,
allow_merge_commit: defProtRules.data.allow_merge_commit,
allow_rebase_merge: defProtRules.data.allow_rebase_merge,
allow_auto_merge: defProtRules.data.allow_auto_merge,
delete_branch_on_merge: defProtRules.data.delete_branch_on_merge,
allow_update_branch: defProtRules.data.allow_update_branch,
use_squash_pr_title_as_default: defProtRules.data.use_squash_pr_title_as_default,
squash_merge_commit_message: defProtRules.data.squash_merge_commit_message,
squash_merge_commit_title: defProtRules.data.squash_merge_commit_title,
merge_commit_message: defProtRules.data.merge_commit_message,
merge_commit_title: defProtRules.data.merge_commit_title
})
}
main().catch(error => {
console.error(error);
process.exit(1);
});