Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions .github/workflows/repo-stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Compatibility alias. Not a public API.
# Unmigrated callers still `uses: qntx/workflows/.github/workflows/repo-stale.yml@main`.
# This file only exists so those runs resolve instead of failing and mailing.
# New callers use ops-stale.yml@v2. Do not add behavior here; forward only.
name: Ops / Stale

on:
workflow_call:
inputs:
days-before-issue-stale:
description: 'Days of inactivity before an issue is marked stale.'
required: false
type: number
default: 30
days-before-pr-stale:
description: 'Days of inactivity before a PR is marked stale.'
required: false
type: number
default: 45
days-before-issue-close:
description: 'Days after stale before an issue is closed.'
required: false
type: number
default: 5
days-before-pr-close:
description: 'Days after stale before a PR is closed.'
required: false
type: number
default: 10
only-labels:
description: 'Comma-separated labels required for items to be considered. Empty means no filter (default).'
required: false
type: string
default: ''
exempt-labels:
description: 'Comma-separated labels that exempt items from being marked stale.'
required: false
type: string
default: 'awaiting-approval,work-in-progress'

permissions:
issues: write
pull-requests: write

jobs:
stale:
permissions:
issues: write
pull-requests: write
uses: $/.github/workflows/ops-stale.yml
with:
days-before-issue-stale: ${{ inputs.days-before-issue-stale }}
days-before-pr-stale: ${{ inputs.days-before-pr-stale }}
days-before-issue-close: ${{ inputs.days-before-issue-close }}
days-before-pr-close: ${{ inputs.days-before-pr-close }}
only-labels: ${{ inputs.only-labels }}
exempt-labels: ${{ inputs.exempt-labels }}
57 changes: 57 additions & 0 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# Compatibility alias. Not a public API.
# Unmigrated callers still `uses: qntx/workflows/.github/workflows/stale.yml@main`.
# This file only exists so those runs resolve instead of failing and mailing.
# New callers use ops-stale.yml@v2. Do not add behavior here; forward only.
name: Ops / Stale

on:
workflow_call:
inputs:
days-before-issue-stale:
description: 'Days of inactivity before an issue is marked stale.'
required: false
type: number
default: 30
days-before-pr-stale:
description: 'Days of inactivity before a PR is marked stale.'
required: false
type: number
default: 45
days-before-issue-close:
description: 'Days after stale before an issue is closed.'
required: false
type: number
default: 5
days-before-pr-close:
description: 'Days after stale before a PR is closed.'
required: false
type: number
default: 10
only-labels:
description: 'Comma-separated labels required for items to be considered. Empty means no filter (default).'
required: false
type: string
default: ''
exempt-labels:
description: 'Comma-separated labels that exempt items from being marked stale.'
required: false
type: string
default: 'awaiting-approval,work-in-progress'

permissions:
issues: write
pull-requests: write

jobs:
stale:
permissions:
issues: write
pull-requests: write
uses: $/.github/workflows/ops-stale.yml
with:
days-before-issue-stale: ${{ inputs.days-before-issue-stale }}
days-before-pr-stale: ${{ inputs.days-before-pr-stale }}
days-before-issue-close: ${{ inputs.days-before-issue-close }}
days-before-pr-close: ${{ inputs.days-before-pr-close }}
only-labels: ${{ inputs.only-labels }}
exempt-labels: ${{ inputs.exempt-labels }}
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `ops-sync` jails canonical `.git` / `.github` path segments after `realpath`, not only `$root/.git` / `$root/.github`.
- `scorecard` checkout is `$/actions/hardened-checkout`.

### Added

- `stale.yml` and `repo-stale.yml` compatibility aliases. `workflow_call` only; they forward to `ops-stale.yml` so unmigrated `@main` callers (qntx-labs) stop failing on a missing file. New callers still use `ops-stale.yml@v2`.

### Removed

- `ops-dependabot` `pull_request` / `pull_request_target` job arm, `dependabot/fetch-metadata`, and composite inputs `pr-labels`, `update-type`, `actor`, `pr-node-id`, `event-name`.
Expand Down
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,13 @@ Publish job id is `publish`. `publish-container.yml` splits mutually exclusive `

### Ops

| Workflow | Purpose |
| -------------------- | ------------------------------------------------------------------ |
| `ops-stale.yml` | `actions/stale`. `workflow_call` only; the caller owns `schedule`. |
| `ops-sync.yml` | Mirror a folder from another repository. Secret `SYNC_TOKEN`. |
| `ops-dependabot.yml` | Schedule squash-merge when green. No auto-merge arm. |
| Workflow | Purpose |
| -------------------- | ----------------------------------------------------------------------- |
| `ops-stale.yml` | `actions/stale`. `workflow_call` only; the caller owns `schedule`. |
| `stale.yml` | Compatibility alias → `ops-stale.yml`. Unmigrated `@main` callers only. |
| `repo-stale.yml` | Compatibility alias → `ops-stale.yml`. Unmigrated `@main` callers only. |
| `ops-sync.yml` | Mirror a folder from another repository. Secret `SYNC_TOKEN`. |
| `ops-dependabot.yml` | Schedule squash-merge when green. No auto-merge arm. |

### This repository only

Expand Down
9 changes: 9 additions & 0 deletions docs/CATALOGUE.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,12 @@ Not a consumer API. Required check-run name for this repository is `Self / CI`.
| `self-retag.yml` | `Self / Retag` | `retag` | Post-squash operator: force-move annotated `v<major>` to `origin/main`. |

`scorecard` is `continue-on-error: true` and is not in the aggregator `needs`.

## Compatibility aliases

Not a public API. Do not pin new callers here.

| File | Forwards to | Why it exists |
| ---------------- | --------------- | ------------------------------------------------------------------------------------------------------ |
| `stale.yml` | `ops-stale.yml` | Unmigrated `uses: …/stale.yml@main` (qntx-labs). Missing file made those scheduled runs fail and mail. |
| `repo-stale.yml` | `ops-stale.yml` | Same for `uses: …/repo-stale.yml@main`. |
2 changes: 1 addition & 1 deletion docs/CONSUMERS.md
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ permissions:
pull-requests: write
```

The caller owns `schedule`. `ops-stale.yml` has no cron.
The caller owns `schedule`. `ops-stale.yml` has no cron. `stale.yml` and `repo-stale.yml` are compatibility aliases that forward to `ops-stale.yml` for unmigrated `@main` callers.

## Ops / Sync

Expand Down
6 changes: 4 additions & 2 deletions docs/MIGRATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,15 +48,17 @@ No shims. Old filenames are deleted. Change every `uses:` in the same window. Pi

## Deleted names (not restored)

`python.yml`, `python-publish.yml`, `docker.yml`, `publish-npm-bun.yml`, `container-build.yml`, `gen-openapi-client.yml`, `ci-cpp.yml`, `ci-dart.yml`, `repo-stale.yml`, `stale.yml`, `repo-sync-folder.yml`, plus historical `bun.yml`, `c-cpp.yml`, `foundry.yml`, `go.yml`, `node.js.yml`, `dart.yml`, `npm-publish.yml`, `bun-publish.yml`, `rust.yml`, `rust-publish.yml`, `rust-cd.yml`, `github-pages.yml`, `sync-repo-folder.yml`.
`python.yml`, `python-publish.yml`, `docker.yml`, `publish-npm-bun.yml`, `container-build.yml`, `gen-openapi-client.yml`, `ci-cpp.yml`, `ci-dart.yml`, `repo-sync-folder.yml`, plus historical `bun.yml`, `c-cpp.yml`, `foundry.yml`, `go.yml`, `node.js.yml`, `dart.yml`, `npm-publish.yml`, `bun-publish.yml`, `rust.yml`, `rust-publish.yml`, `rust-cd.yml`, `github-pages.yml`, `sync-repo-folder.yml`.

`stale.yml` and `repo-stale.yml` exist again as `workflow_call` forwards to `ops-stale.yml` so unmigrated `@main` callers do not fail. They are not the public API. New callers still use `ops-stale.yml@v2`.

## Post-cutover scan

```bash
gh search code --owner qntx 'qntx/workflows/.github/workflows' --limit 200
```

Must not reappear: `python.yml@`, `docker.yml`, `publish-npm-bun.yml`, `container-build.yml`, `ci-cpp.yml`, `ci-dart.yml`, `repo-stale.yml`, `stale.yml@`, `repo-sync-folder.yml`, `gen-openapi`.
Must not reappear: `python.yml@`, `docker.yml`, `publish-npm-bun.yml`, `container-build.yml`, `ci-cpp.yml`, `ci-dart.yml`, `repo-sync-folder.yml`, `gen-openapi`.

## Post-v2.0.0 (`ops-dependabot`)

Expand Down
Loading