Skip to content

Commit cd52453

Browse files
authored
Merge pull request #370 from per1234/sync-labels
Add CI workflow to synchronize with shared repository labels
2 parents c2cfd40 + b5a243f commit cd52453

File tree

2 files changed

+139
-0
lines changed

2 files changed

+139
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
# Used by the "Sync Labels" workflow
2+
# See: https://github.com/Financial-Times/github-label-sync#label-config-file
3+
4+
- name: "topic: preprocessor"
5+
color: 00ffff
6+
description: Related to sketch preprocessing

.github/workflows/sync-labels.yml

+133
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/sync-labels.md
2+
name: Sync Labels
3+
4+
# See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows
5+
on:
6+
push:
7+
paths:
8+
- ".github/workflows/sync-labels.ya?ml"
9+
- ".github/label-configuration-files/*.ya?ml"
10+
pull_request:
11+
paths:
12+
- ".github/workflows/sync-labels.ya?ml"
13+
- ".github/label-configuration-files/*.ya?ml"
14+
schedule:
15+
# Run daily at 8 AM UTC to sync with changes to shared label configurations.
16+
- cron: "0 8 * * *"
17+
workflow_dispatch:
18+
repository_dispatch:
19+
20+
env:
21+
CONFIGURATIONS_FOLDER: .github/label-configuration-files
22+
CONFIGURATIONS_ARTIFACT: label-configuration-files
23+
24+
jobs:
25+
check:
26+
runs-on: ubuntu-latest
27+
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v2
31+
32+
- name: Download JSON schema for labels configuration file
33+
id: download-schema
34+
uses: carlosperate/download-file-action@v1.0.3
35+
with:
36+
file-url: https://raw.githubusercontent.com/arduino/tooling-project-assets/main/workflow-templates/assets/sync-labels/arduino-tooling-gh-label-configuration-schema.json
37+
location: ${{ runner.temp }}/label-configuration-schema
38+
39+
- name: Install JSON schema validator
40+
run: |
41+
sudo npm install \
42+
--global \
43+
ajv-cli \
44+
ajv-formats
45+
46+
- name: Validate local labels configuration
47+
run: |
48+
# See: https://github.com/ajv-validator/ajv-cli#readme
49+
ajv validate \
50+
--all-errors \
51+
-c ajv-formats \
52+
-s "${{ steps.download-schema.outputs.file-path }}" \
53+
-d "${{ env.CONFIGURATIONS_FOLDER }}/*.{yml,yaml}"
54+
55+
download:
56+
needs: check
57+
runs-on: ubuntu-latest
58+
59+
strategy:
60+
matrix:
61+
filename:
62+
# Filenames of the shared configurations to apply to the repository in addition to the local configuration.
63+
# https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/sync-labels
64+
- universal.yml
65+
- tooling.yml
66+
67+
steps:
68+
- name: Download
69+
uses: carlosperate/download-file-action@v1.0.3
70+
with:
71+
file-url: https://raw.githubusercontent.com/arduino/tooling-project-assets/main/workflow-templates/assets/sync-labels/${{ matrix.filename }}
72+
73+
- name: Pass configuration files to next job via workflow artifact
74+
uses: actions/upload-artifact@v2
75+
with:
76+
path: |
77+
*.yaml
78+
*.yml
79+
if-no-files-found: error
80+
name: ${{ env.CONFIGURATIONS_ARTIFACT }}
81+
82+
sync:
83+
needs: download
84+
runs-on: ubuntu-latest
85+
86+
steps:
87+
- name: Set environment variables
88+
run: |
89+
# See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
90+
echo "MERGED_CONFIGURATION_PATH=${{ runner.temp }}/labels.yml" >> "$GITHUB_ENV"
91+
92+
- name: Determine whether to dry run
93+
id: dry-run
94+
if: >
95+
github.event == 'pull_request' ||
96+
github.ref != format('refs/heads/{0}', github.event.repository.default_branch)
97+
run: |
98+
# Use of this flag in the github-label-sync command will cause it to only check the validity of the
99+
# configuration.
100+
echo "::set-output name=flag::--dry-run"
101+
102+
- name: Checkout repository
103+
uses: actions/checkout@v2
104+
105+
- name: Download configuration files artifact
106+
uses: actions/download-artifact@v2
107+
with:
108+
name: ${{ env.CONFIGURATIONS_ARTIFACT }}
109+
path: ${{ env.CONFIGURATIONS_FOLDER }}
110+
111+
- name: Remove unneeded artifact
112+
uses: geekyeggo/delete-artifact@v1
113+
with:
114+
name: ${{ env.CONFIGURATIONS_ARTIFACT }}
115+
116+
- name: Merge label configuration files
117+
run: |
118+
# Merge all configuration files
119+
shopt -s extglob
120+
cat "${{ env.CONFIGURATIONS_FOLDER }}"/*.@(yml|yaml) > "${{ env.MERGED_CONFIGURATION_PATH }}"
121+
122+
- name: Install github-label-sync
123+
run: sudo npm install --global github-label-sync
124+
125+
- name: Sync labels
126+
env:
127+
GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
128+
run: |
129+
# See: https://github.com/Financial-Times/github-label-sync
130+
github-label-sync \
131+
--labels "${{ env.MERGED_CONFIGURATION_PATH }}" \
132+
${{ steps.dry-run.outputs.flag }} \
133+
${{ github.repository }}

0 commit comments

Comments
 (0)