Skip to content

fix: repair the build pipeline, add CI, ship 1.4.1 - #78

Merged
Railly merged 5 commits into
mainfrom
fix/build-pipeline
Aug 7, 2026
Merged

Railly merged 5 commits into
mainfrom
fix/build-pipeline

Conversation

@Railly

@Railly Railly commented Aug 7, 2026

Copy link
Copy Markdown
Owner

Why now

A fix merged in November 2024 never reached anyone. #68 by @peguimasid made local variables readable in Vercel 2024 Dark, and it has been sitting in main for fifteen months while the published extension still ships the broken color.

Verified by downloading the published .vsix and comparing it against HEAD:

variable.other.local
Published today, 39,731 installs #171717, nearly black on a dark background
main #EDEDED

Publishing has been manual, which is exactly how this happens.

What was broken

The generators reported success on failure. Writes inside forEach were never awaited and neither entry point had an error handler, so a failed write still exited 0. Verified by injecting a failing write: it exited 0 before, and exits 1 now.

The iTerm2 generator had never run. xmlbuilder was imported but never declared, so the step crashed every time and the crash was swallowed by the bug above. It runs now and reproduces the four committed .itermcolors files byte for byte.

vsce and ovsx were never declared, so the publish scripts only worked if they happened to be installed globally.

The package was 7 MB. .vscodeignore excluded almost nothing, so every publish carried screenshots/, src/, demos/, and node_modules/. vsce also refused to package at all, because demos/.env tripped its secret check. Both fixed by the ignore list; it is 57 KB now, a 99% reduction. The README is unaffected since every image it references is a remote URL.

C++ colors, reworked from #71

Credit to @helloAmulya for the diagnosis and the color choices, which this keeps verbatim. Two things blocked that PR:

  1. It did not compile. The comment.cpp block was missing its closing braces: TS1136 on line 852. The CI in this PR would have caught it on day one.
  2. It carried +724/-320 in Material, because running the build regenerates the five themes tinte owns and reverts them to their pre-tinte state. That is a property of this repo, not a mistake by the author.

Scoped to the generator-owned themes, it is 126 purely additive lines across Classic, Light, and Vercel, zero deletions.

Closes #70.

CI, closing #2

Open since December 2022.

ci.yml on every PR: typecheck, regenerate, drift gate, package, and upload the .vsix as an artifact so a theme change can be installed and looked at before merging.

release.yml on a v* tag: same checks, publish to both registries, cut a GitHub release with the .vsix attached. The tag must match package.json or the job fails.

The drift gate deliberately covers only the five themes this repo's generator owns. Material and the four Flexoki variants come from tinte and are not reproducible from src/, so gating them would fail every run and pressure someone into reverting tinte to make CI green.

Verification

Check Result
npm run generate end to end exit 0, both generators
Generator exits 1 on a real failure verified by injection
iTerm2 output vs committed byte identical
Typecheck exit 0
Drift gate, tampered file exit 1
Drift gate, clean tree exit 0
Package size 7 MB to 57 KB
All 10 declared themes present and parse yes
@peguimasid's fix present in the package #EDEDED
Themes owned by tinte untouched

Before merging

release.yml needs two repository secrets, neither of which exists yet:

  • VSCE_PAT, an Azure DevOps token, Marketplace scope Manage. The old one is likely expired since the last publish was fifteen months ago.
  • OVSX_PAT, from open-vsx.org. The RaillyHugo namespace is alive, so this only needs a new token, not a new namespace.

Tag v1.4.1 once those are set.

Railly added 5 commits August 7, 2026 18:05
The generators reported success on failure. Writes inside forEach were never
awaited and neither entry point had an error handler, so a failed write still
exited 0. A CI job trusting that exit code would publish corrupt output. Both
generators now await every write and exit 1 on error, verified by injecting a
failing write and observing exit 1.

The iTerm2 generator had never run at all: xmlbuilder was imported but never
declared, so the step crashed on every invocation and the failure was hidden
by the same bug. It now runs, and reproduces the four committed .itermcolors
files byte for byte.

vsce and ovsx were called by the publish scripts without being declared, so
publishing only worked when they happened to be installed globally.

.vscodeignore excluded almost nothing, so the published package carried
screenshots/, src/, demos/, and node_modules: 7 MB for a theme that is 57 KB
of JSON. vsce also refused to package at all because demos/.env matched its
secret check. Both are fixed by the ignore list. The README is unaffected
since every image it references is a remote URL.

Bump to 1.4.1 and write a real changelog. The previous one said "Initial
release" while ten variants were live.

No theme JSON is touched by this commit.
Closes #2, open since December 2022. Publishing has been manual, which is
how a fix merged in November 2024 sat unreleased for fifteen months.

ci.yml runs on every PR: typecheck, regenerate, drift gate, package, and
upload the .vsix as an artifact so a theme change can be installed and
looked at before merging.

release.yml runs on a v* tag: same checks, then publish to both registries
and cut a GitHub release with the .vsix attached. Tagging is deliberate, and
the tag must match package.json or the job fails.

The drift gate covers only the five themes this repo's generator owns.
Material and the four Flexoki variants come from tinte and are not
reproducible from src/, so including them would fail every run and pressure
someone into reverting tinte to make CI green.

Both gates were verified by tampering with a generated file and observing
exit 1, and by a clean run observing exit 0.

Needs VSCE_PAT and OVSX_PAT as repository secrets.
Reworked from #71 by @helloAmulya, whose diagnosis and color choices this
keeps verbatim. Two things blocked that PR from merging as it stood.

It did not compile: the comment.cpp block was missing its closing braces,
which tsc reports as TS1136 on line 852. The CI added in this branch would
have caught it the day it was opened.

It also carried +724/-320 in OneHunter-Material because running the build
regenerates the five themes that tinte owns, which reverts them to their
pre-tinte state. That is a property of the repo, not a mistake by the
author. Restricting the change to the generator-owned themes makes it 126
purely additive lines across Classic, Light, and Vercel, with no deletions.

Closes #70.
Without this, a missing secret surfaces as a 401 from vsce or ovsx partway
through the job, after the other registry has already been published to,
leaving the two stores on different versions.

The check runs before packaging, so the job fails with both registries
untouched and a message naming the missing secret.
@Railly
Railly merged commit 8c8af61 into main Aug 7, 2026
1 check passed
@Railly
Railly deleted the fix/build-pipeline branch August 7, 2026 21:45
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.

Variables in .cpp files are dark instead of white in One Hunter Material theme

1 participant