GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - EndBug/label-sync: :octocat: An action that allows you to sync labels from a repository or a config file

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace
BranchesTags
Open more actions menu

Latest commit

 

History

332 Commits
332 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
.husky
.husky
 
 
lib
lib
 
 
src
src
 
 
.all-contributorsrc
.all-contributorsrc
 
 
.editorconfig
.editorconfig
 
 
.eslintignore
.eslintignore
 
 
.eslintrc.json
.eslintrc.json
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.prettierrc.js
.prettierrc.js
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
action.yml
action.yml
 
 
package-lock.json
package-lock.json
 
 
package.json
package.json
 
 
tsconfig.json
tsconfig.json
 
 

Repository files navigation

label-sync

All Contributors

An action that allows you to sync labels from a repository or a config file.

Example workflow:

name: Sync labels
on:
  # You can run this with every type of event, but it's better to run it only when you actually need it.
  workflow_dispatch:

permissions:
  issues: write

jobs:
  labels:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v4
        with:
          sparse-checkout: .github/labels.yml

      - uses: EndBug/label-sync@v2
        with:
          # If you want to use a config file, you can put its path or URL here, multiple files are also allowed (more info in the paragraphs below)
          config-file: .github/labels.yml
          # as URL:
          config-file: https://raw.githubusercontent.com/EndBug/labels/main/labels.yml
          # as multiple:
          config-file: |
            https://raw.githubusercontent.com/EndBug/labels/main/labels.yml
            .github/labels.yml

          # If you want to use a source repo, you can put is name here (only the owner/repo format is accepted)
          source-repo: owner/repo

          # If you're using a private source repo or a URL that needs an 'Authorization' header, you'll need to add a custom token for the action to read it
          request-token: ${{ secrets.YOUR_OWN_SECRET }}

          # If you want to delete any additional label, set this to true
          delete-other-labels: false

          # If you want the action just to show you the preview of the changes, without actually editing the labels, set this to true
          dry-run: true

          # You can change the token used to change the labels, this is the default one
          token: ${{ secrets.GITHUB_TOKEN }}

This is only a sample workflow to illustrate all the options: if you want to see an actual workflow you can check out the one in this repo here.

Config files

If you want to use a config file you can create your own following the instructions below.

If you want to start off by copying the labels from another repository, you can use my EndBug/export-label-config action, that will generate one for you.

How to create a config file:

  • Create a JSON or YAML file, with one of these extensions: .json, .yaml, .yml.
  • Every label should be an array element: add some square brackets [] if you need to.
  • Every element of the array should be an object with the following properties:
    • name - The name of the label.
    • color - The color of the label, with or without a leading #.
    • description - [optional] The description of the label (max 100 characters).
    • aliases - [optional] An array containing the "aliases" of the label. If an existing label's name is an alias that label will be edited to match your config: this way you don't loose issues and PRs that have been labeled previously.

This is how it would end up looking:

- name: A label
  color: '000000'

- name: Another label
  color: '111111'
  description: A very inspiring description

- name: Yet another label
  color: '222222'
  aliases: ['first', 'second', 'third']
[
  {
    "name": "A label",
    "color": "000000"
  },
  {
    "name": "Another label",
    "color": "111111",
    "description": "A very inspiring description"
  },
  {
    "name": "Yet another label",
    "color": "222222",
    "aliases": ["first", "second", "third"]
  }
]

Note that color may be specified in either 000000 or '#000000' format. Mind the quotes when using yaml.

If you want to see an actual config file, you can check out the one in this repo here.

This action can either read a local file or fetch it from a custom URL.
If you want to use a URL make sure that the data field of the response contains JSON or YAML text that follows the structure above.

An example of how you may want to use a URL instead of a local file is if you want to use a config file that is located in a GitHub repo, without having to copy it to your own.
You can use the "raw" link that GitHub provides for the file:

- uses: EndBug/label-sync@v2
  with:
    # This is just an example, but any valid URL can be used
    config-file: 'https://raw.githubusercontent.com/EndBug/labels/main/labels.yml'

You can also specify several config files (e.g. sync a set of "global" labels as well as a set of "local" labels):

- uses: EndBug/label-sync@v2
  with:
    config-file: |
        https://raw.githubusercontent.com/EndBug/labels/main/labels.yml
        .github/labels.yml

This is different than using the source-repo option, since this also allows you to use aliases, if the config file has any. If you use the source-repo option the action will only copy over the missing labels and update colors, without updating or deleting anything else.

If the URL you're using needs an Authorization header (like if, for example, you're fetching it from a private repo), you can put its value in the request-token input:

- uses: EndBug/label-sync@v2
  with:
    config-file: 'https://raw.githubusercontent.com/User/repo-name/path/to/labels.yml'
    # Remember not to put PATs in files, use GitHub secrets instead
    request-token: ${{ secrets.YOUR_CUSTOM_PAT }}

The request-token input can also be used with a source-repo, if that repo is private.

If your URL needs a more elaborate request, it's better if you perform it separately and save its output to a local file. You can then run the action using the local config file you just created.

Contributors ✨

Thanks go to these wonderful people (emoji key):

Federico Grandi
Federico Grandi

💻
K3rnelPan1c
K3rnelPan1c

💻
danielwerg
danielwerg

📖
Ken Odegard
Ken Odegard

💻
Adam Snyder
Adam Snyder

💻
Salvador real
Salvador real

💻
Simon Lepel
Simon Lepel

💻
Carlos Rodríguez Hernández
Carlos Rodríguez Hernández

💻
Marco
Marco

🐛
Andrew Vaughan
Andrew Vaughan

📖
Reece Hart
Reece Hart

🚧
Michaël Vanderheyden
Michaël Vanderheyden

🐛
William Ford
William Ford

🚧

This project follows the all-contributors specification. Contributions of any kind welcome!

About

:octocat: An action that allows you to sync labels from a repository or a config file

Topics

actionscigithubhacktoberfestlabelsrepositorysyncutilityworkflow

Resources

Readme
MIT license

Code of conduct

Code of conduct
Activity

Stars

45 stars

Watchers

0 watching

Forks

10 forks
Report repository

Releases

Sponsor this project

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.