File: sync-labels.yml

package info (click to toggle)
golang-github-arduino-pluggable-monitor-protocol-handler 0.9.2-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 292 kB
  • sloc: makefile: 4
file content (139 lines) | stat: -rw-r--r-- 4,700 bytes parent folder | download
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
131
132
133
134
135
136
137
138
139
# Source: https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/sync-labels.md
name: Sync Labels

# See: https://docs.github.com/en/actions/reference/events-that-trigger-workflows
on:
  push:
    paths:
      - ".github/workflows/sync-labels.ya?ml"
      - ".github/label-configuration-files/*.ya?ml"
  pull_request:
    paths:
      - ".github/workflows/sync-labels.ya?ml"
      - ".github/label-configuration-files/*.ya?ml"
  schedule:
    # Run daily at 8 AM UTC to sync with changes to shared label configurations.
    - cron: "0 8 * * *"
  workflow_dispatch:
  repository_dispatch:

env:
  CONFIGURATIONS_FOLDER: .github/label-configuration-files
  CONFIGURATIONS_ARTIFACT: label-configuration-files

jobs:
  check:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Download JSON schema for labels configuration file
        id: download-schema
        uses: carlosperate/download-file-action@v1
        with:
          file-url: https://raw.githubusercontent.com/arduino/tooling-project-assets/main/workflow-templates/assets/sync-labels/arduino-tooling-gh-label-configuration-schema.json
          location: ${{ runner.temp }}/label-configuration-schema

      - name: Install JSON schema validator
        run: |
          sudo npm install \
            --global \
            ajv-cli \
            ajv-formats

      - name: Validate local labels configuration
        run: |
          # See: https://github.com/ajv-validator/ajv-cli#readme
          ajv validate \
            --all-errors \
            -c ajv-formats \
            -s "${{ steps.download-schema.outputs.file-path }}" \
            -d "${{ env.CONFIGURATIONS_FOLDER }}/*.{yml,yaml}"

  download:
    needs: check
    runs-on: ubuntu-latest

    strategy:
      matrix:
        filename:
          # Filenames of the shared configurations to apply to the repository in addition to the local configuration.
          # https://github.com/arduino/tooling-project-assets/blob/main/workflow-templates/assets/sync-labels
          - universal.yml
          - tooling.yml

    steps:
      - name: Download
        uses: carlosperate/download-file-action@v1
        with:
          file-url: https://raw.githubusercontent.com/arduino/tooling-project-assets/main/workflow-templates/assets/sync-labels/${{ matrix.filename }}

      - name: Pass configuration files to next job via workflow artifact
        uses: actions/upload-artifact@v2
        with:
          path: |
            *.yaml
            *.yml
          if-no-files-found: error
          name: ${{ env.CONFIGURATIONS_ARTIFACT }}

  sync:
    needs: download
    runs-on: ubuntu-latest

    steps:
      - name: Set environment variables
        run: |
          # See: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
          echo "MERGED_CONFIGURATION_PATH=${{ runner.temp }}/labels.yml" >> "$GITHUB_ENV"

      - name: Determine whether to dry run
        id: dry-run
        if: >
          github.event_name == 'pull_request' ||
          (
            (
              github.event_name == 'push' ||
              github.event_name == 'workflow_dispatch'
            ) &&
            github.ref != format('refs/heads/{0}', github.event.repository.default_branch)
          )
        run: |
          # Use of this flag in the github-label-sync command will cause it to only check the validity of the
          # configuration.
          echo "::set-output name=flag::--dry-run"

      - name: Checkout repository
        uses: actions/checkout@v3

      - name: Download configuration files artifact
        uses: actions/download-artifact@v3
        with:
          name: ${{ env.CONFIGURATIONS_ARTIFACT }}
          path: ${{ env.CONFIGURATIONS_FOLDER }}

      - name: Remove unneeded artifact
        uses: geekyeggo/delete-artifact@v1
        with:
          name: ${{ env.CONFIGURATIONS_ARTIFACT }}

      - name: Merge label configuration files
        run: |
          # Merge all configuration files
          shopt -s extglob
          cat "${{ env.CONFIGURATIONS_FOLDER }}"/*.@(yml|yaml) > "${{ env.MERGED_CONFIGURATION_PATH }}"

      - name: Install github-label-sync
        run: sudo npm install --global github-label-sync

      - name: Sync labels
        env:
          GITHUB_ACCESS_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        run: |
          # See: https://github.com/Financial-Times/github-label-sync
          github-label-sync \
            --labels "${{ env.MERGED_CONFIGURATION_PATH }}" \
            ${{ steps.dry-run.outputs.flag }} \
            ${{ github.repository }}