Skip to content

Dogfood: run labelsync against specsnl from CI #48

Closed

Description

@Ilyes512

Goal

Make this repository the tool's first real user: labelsync managing labelsync's own labels. A
scheduled drift-correction job is a no-op when there is nothing to fix, which is exactly the
property worth demonstrating.

Design reference

docs/design.md § CI integration

Scope

  • .github/workflows/labels.yml — dry-run on pull requests touching labels.yml, apply on
    merge to main, and a weekly scheduled drift correction
  • Pull-request runs use sync --dry-run --output=json; exit 2 fails the check when the
    config and live state disagree
  • The Actions-injected GITHUB_TOKEN will not work. It is scoped to the repository the
    workflow runs in and cannot write labels to other repositories in the organisation. Use a PAT
    stored as LABELSYNC_TOKEN, and document the rotation burden
  • Note the GitHub App alternative — no expiry, higher rate limits, scoped to selected
    repositories — as the later option, addable behind the same resolver interface without
    touching call sites
  • Decide whether the stock bug and enhancement labels become the renames: worked
    example, or prune candidates

Depends on

#43, #22

Activity

  1. added this to the M7 · Ship milestone on Aug 6, 2026
  2. Ilyes512 commented on Aug 11, 2026

    @Ilyes512
    MemberAuthor

    Implemented on feat/GH-48-dogfood-ci.

    Left unticked: extending labels.yml beyond the self group. The box says "only after a
    dry-run has been reviewed", and that review has not happened. It also needs a decision this issue
    does not contain: the org holds ~67 repositories, most of them private client projects, and this
    catalogue's labels (area: palette, type: spike) describe this codebase rather than any of
    them. Rolling out sensibly means a second group with its own label set, not widening self — worth
    its own issue.

    Decision on the stock labels: renames, not prune candidates. bug → type: bug and
    enhancement → type: feature are now in labels.yml. A rename is a PATCH, so the label keeps
    its id and its issues; a delete plus a create would strip it from all of them. On this repository
    both entries are inert — the targets already exist, so the planner skips them — and that is the
    point: they migrate the next repository the catalogue covers.

    Two things to be aware of before merging.

    1. The secret does not exist yet. Until LABELSYNC_TOKEN is set, the job annotates a warning
      and skips rather than failing, and it is deliberately not a required status check — a fork's pull
      request never sees the secret, and paths: means the job does not run on most pull requests at
      all.

    2. The first apply will recolour three labels. A local dry run against this repository:

      ~  recolour  bug            #936d1f   (displaced by "type: bug")
      ~  recolour  documentation  #13ec80   (displaced by "area: docs")
      ~  recolour  enhancement    #a50d73   (displaced by "type: feature")
      

      Configured colours are reserved, and those three leftovers are sitting on them. Every stock label
      here is unused (0 issues, 0 pull requests), so the tidier outcome is to remove them once —
      labelsync sync --mode prune --prune all — after which the apply is a clean no-op. That is a
      destructive write to live labels, so it is your call rather than something this branch does.

  3. Ilyes512 commented on Aug 12, 2026

    @Ilyes512
    MemberAuthor

    Dropped the extend labels.yml to the wider organisation scope item, and the Goal's clause about the organisation with it: rolling labelsync out across specsnl is not happening from this repository, so it is not a box this issue can ever tick. What is left is dogfooding — labelsync managing its own labels — and #97 covers all of it.

  4. added a commit that references this issue on Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions