Skip to content

fix: resolve 'changed'/'all' extensions in downstream publish jobs - #165

Merged
peternhale merged 2 commits into
mainfrom
fix/vscode-publish-resolve-changed-extensions
Jul 29, 2026
Merged

fix: resolve 'changed'/'all' extensions in downstream publish jobs#165
peternhale merged 2 commits into
mainfrom
fix/vscode-publish-resolve-changed-extensions

Conversation

@peternhale

Copy link
Copy Markdown
Contributor

Problem

Consuming repos that call vscode-publish-extensions.yml with extensions: changed (or all) stopped getting GitHub releases from their nightly builds, even though the workflow reported success and tags kept being created.

Observed in forcedotcom/apex-language-support: nightly tags continue daily (v0.9.32-nightly.20260729), but the last GitHub release is v0.9.19-nightly.20260714 — the first nightly after that repo migrated its nightly to extensions: 'changed'.

Root cause

determine-changes resolves the extensions input (changed/all/CSV) into concrete extension directory names and exposes them as outputs.selected-extensions. The bump-versions job correctly consumes that resolved output — which is why tags kept working.

But several downstream jobs read the raw inputs.extensions instead, so with extensions: changed they iterated over the literal string "changed" as if it were a directory:

  • create-github-releases — looked for packages/changed/package.json, didn't find it, continued, then still printed ✅ Releases created. Silent no-op → no GitHub release. This is the reported breakage.
  • slack-notify / slack-notify-failure — reported blank extension names/versions in nightly Slack messages.
  • determine-publish-matrix — reads the raw input too; currently inert for nightly (IS_NIGHTLY: 'true' short-circuits to an empty matrix before the input is used), fixed for consistency and future non-nightly use.

Evidence from a live run (create-github-releases step):

⚠️  Skipping changed: package.json not found
✅ Releases created

Fix

Wire determine-changes into each affected job's needs and consume needs.determine-changes.outputs.selected-extensions instead of inputs.extensions. Also gate create-github-releases on the resolved output rather than the raw input.

determine-changes itself (line ~216) intentionally still reads the raw inputs.extensions — it is the resolver.

Validation

  • YAML parses cleanly; determine-changes has no needs, so no dependency cycle is introduced.
  • Verified all four consumers now list determine-changes in needs.

Full end-to-end confirmation requires a nightly run in a consuming repo (or a workflow_dispatch with extensions: changed) after this merges to @main.

The determine-changes job resolves the `extensions` input (e.g. 'changed'
or 'all') into concrete extension directory names and exposes them via
`selected-extensions`. Several downstream jobs instead consumed the raw
`inputs.extensions` value, so when a caller passed `extensions: changed`
they looped over the literal string "changed" as if it were a directory:

- create-github-releases: looked for packages/changed/package.json, did
  not find it, skipped, yet still printed "Releases created" — so nightly
  runs stopped producing GitHub releases while tags kept being created.
- slack-notify / slack-notify-failure: reported blank extension names and
  versions.
- determine-publish-matrix: read the raw input (currently inert for
  nightly since IS_NIGHTLY short-circuits to an empty matrix, fixed for
  consistency / future non-nightly use).

Wire determine-changes into each job's `needs` and consume
`needs.determine-changes.outputs.selected-extensions`. Also gate
create-github-releases on the resolved output rather than the raw input.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

missed updating publish-skipped-notice?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good catch — fixed in 3c316d6. Wired determine-changes into the job's needs and switched the log line to needs.determine-changes.outputs.selected-extensions so it prints resolved directory names instead of the literal changed. It's log-only here (no functional break like create-github-releases), but it keeps this job consistent with the rest of the fix.

Addresses review feedback on PR #165: publish-skipped-notice logged the
raw inputs.extensions (e.g. the literal 'changed') instead of the
resolved directory names. Wire determine-changes into needs and consume
needs.determine-changes.outputs.selected-extensions for consistency with
the other downstream jobs.
@peternhale
peternhale requested a review from madhur310 July 29, 2026 15:32
@peternhale
peternhale merged commit 39f8692 into main Jul 29, 2026
3 checks passed
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.

2 participants