Skip to content

Commit 79b075c

Browse files
committed
Add CI workflow to synchronize with shared repository labels
On every push that changes relevant files, and periodically, configure the repository's issue and pull request labels according to the universal, shared, and local label configuration files.
1 parent a46f36a commit 79b075c

File tree

3 files changed

+158
-1
lines changed

3 files changed

+158
-1
lines changed

Diff for: .github/ISSUE_TEMPLATE/bug_report.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
name: Bug report
33
about: Create a report to help us improve
44
title: ''
5-
labels: 'type: bug'
5+
labels: 'type: imperfection'
66
assignees: ''
77

88
---

Diff for: .github/label-configuration-files/labels.yml

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Used by the "Sync Labels" workflow
2+
# See: https://github.com/Financial-Times/github-label-sync#label-config-file
3+
4+
- name: "topic: accessibility"
5+
color: "00ffff"
6+
description: Enabling the use of the software by everyone
7+
- name: "topic: CLI"
8+
color: "00ffff"
9+
description: Related to Arduino CLI
10+
- name: "topic: debugger"
11+
color: "00ffff"
12+
description: Related to the integrated debugger
13+
- name: "topic: language server"
14+
color: "00ffff"
15+
description: Related to the Arduino Language Server
16+
- name: "topic: serial monitor"
17+
color: "00ffff"
18+
description: Related to the Serial Monitor
19+
- name: "topic: theia"
20+
color: "00ffff"
21+
description: Related to the Theia IDE framework
22+
- name: "topic: theme"
23+
color: "00ffff"
24+
description: Related to GUI theming

Diff for: .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/[email protected]
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/[email protected]
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)