Skip to content

feat(ci): add VS Code Marketplace publishing with configurable registries#30

Merged
jimisola merged 12 commits into
mainfrom
feat/centralize-reusable-workflows
May 12, 2026
Merged

feat(ci): add VS Code Marketplace publishing with configurable registries#30
jimisola merged 12 commits into
mainfrom
feat/centralize-reusable-workflows

Conversation

@jimisola
Copy link
Copy Markdown
Member

Summary

  • Add VSCE_PAT secret to publish-to-vscode.yml for VS Code Marketplace authentication
  • Add registries input (comma-separated string, default: open-vsx,vscode-marketplace) so consumers can choose which registries to publish to
  • Both publish steps are conditional on contains(inputs.registries, '<registry>'), removing the need for a both sentinel value

Usage

Publish to both (default — no change needed for existing consumers):

uses: reqstool/.github/.github/workflows/typescript/publish-to-vscode.yml@main
secrets: inherit

Publish to one registry only:

with:
  registries: "open-vsx"          # or "vscode-marketplace"
secrets: inherit

Secrets required

Secret Registry
OPEN_VSX_TOKEN Open VSX
VSCE_PAT VS Code Marketplace

Test plan

  • Trigger a dry-run publish on a consumer repo and verify both registry steps execute
  • Trigger with registries: "open-vsx" and verify only the Open VSX step runs
  • Trigger with registries: "vscode-marketplace" and verify only the Marketplace step runs

jimisola added 12 commits May 4, 2026 10:25
Implements reqstool/reqstool.github.io#33.

Adds 10 reusable workflows organized by language under .github/workflows/:
- common/: check-release, release, release-preview, publish-to-docker
- java/: publish-to-maven, publish-to-gradle (target: portal|central)
- python/: publish-to-python, publish-to-python-test
- typescript/: publish-to-npm, publish-to-vscode

All publish workflows support a dry-run input for CI-safe validation
without uploading to external registries.

release-preview.yml computes the next version via git-cliff and
optionally cross-checks it against the calling repo's build tool via
a version-command input.

Adds tests/ mirroring the workflow directory structure (1:1 file
mapping) with act-compatible test workflows and JSON event fixtures for
failure-path testing of check-release.yml.

Adds ci.yml that runs actionlint, zizmor, yamllint, and act-based
behavioral tests on any change to .github/workflows/** or tests/**.

Adds .github/cliff.toml as the org-wide default changelog config.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
…typescript

Adds reusable build and lint workflows alongside the existing publish/release
workflows, completing the org-wide CI/CD centralization.

New workflows:
- java/lint.yml       — mvn clean validate; java-version input
- java/build-maven.yml — mvn clean verify; java-version input
- java/build-gradle.yml — ./gradlew clean build; java-version input
- python/lint.yml     — black + flake8; package-manager: hatch|poetry input
- python/build-hatch.yml — hatch pytest + build; coverage-source input
- python/build-poetry.yml — poetry install + pytest + build; install-self-as-plugin
  input for plugin e2e tests
- typescript/lint.yml — npm ci + lint + format; node-version input
- typescript/build.yml — npm ci + test + build; use-xvfb and
  dependency-version/install-command inputs for VS Code extension builds

Adds 1:1 test files in tests/ for all new workflows (actionlint-validated;
act execution requires a real project checkout so ci.yml skips act for
build/lint tests).

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
Centralizes the identical Antora build + GitHub Pages deploy workflows
from reqstool-java-annotations and reqstool-java-maven-plugin.

Inputs: node-version (default 24), antora-playbook (default docs/antora-playbook.yml).
Callers pass permissions: pages: write, id-token: write.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
- check-release: replace [[ != glob ]] with case statement (SC2193)
- release, release-preview, ci: group multiple >> redirects into
  { ... } >> file blocks (SC2129)
- build-poetry: replace ls dist/*.whl with find (SC2012)
- publish-to-vscode: replace ls *.vsix with find -maxdepth 1 (SC2012, SC2035)

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
act was showing a Docker image selection prompt and receiving EOF
when run non-interactively, causing all test jobs to fail.

Pre-creating ~/.config/act/actrc with node:20-bullseye-slim
(sufficient for shell-only workflows) resolves this.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
act's --input flag only works for workflow_dispatch events; for
workflow_call the inputs must be embedded in the event JSON payload
under an 'inputs' key.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
act does not propagate with: inputs into nested workflow_call, causing
false failures. release-preview also uses curl which is absent from the
micro image. Both are validated by actionlint; end-to-end testing
happens in the per-repo migration PRs.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
…mat script

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
Addresses CodeQL findings — all jobs only read the repository,
so contents: read is the correct minimal permission.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
…ries

Add VSCE_PAT secret and a registries input ('both' | 'open-vsx' |
'vscode-marketplace', default: 'both') so consumers can choose which
registries to publish to.

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
…sentinel

Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
Signed-off-by: Jimisola Laursen <jimisola@jimisola.com>
@jimisola jimisola self-assigned this May 12, 2026
@jimisola jimisola merged commit 922fbcd into main May 12, 2026
12 checks passed
@jimisola jimisola deleted the feat/centralize-reusable-workflows branch May 12, 2026 07:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant