Skip to content

ci: add tag-triggered npm publish workflow with OIDC provenance#11

Merged
jrusso1020 merged 1 commit into03-23-ci_add_ci_pipeline_with_build_typecheck_and_test_jobsfrom
03-23-ci_add_tag-triggered_npm_publish_workflow_with_oidc_provenance
Mar 23, 2026
Merged

ci: add tag-triggered npm publish workflow with OIDC provenance#11
jrusso1020 merged 1 commit into03-23-ci_add_ci_pipeline_with_build_typecheck_and_test_jobsfrom
03-23-ci_add_tag-triggered_npm_publish_workflow_with_oidc_provenance

Conversation

@jrusso1020
Copy link
Copy Markdown
Collaborator

@jrusso1020 jrusso1020 commented Mar 23, 2026

What

Add npm publish workflow triggered by v* git tags, plus a set-version script and release docs.

Why

Items 3 from VA-855. Enables releasing @hyperframes/* packages to npm from CI with a simple workflow.

How

Publish workflow (.github/workflows/publish.yml)

Two jobs:

  1. Validate — build, typecheck, and run all tests
  2. Publish — publish all 5 packages to npm with provenance attestation

Key design decisions:

  • OIDC Trusted Publishing — no NPM_TOKEN secret needed
  • --provenance — cryptographically links packages to the exact GitHub commit
  • --no-git-checks — required for detached HEAD in CI
  • npm-publish GitHub environment — can require manual approval

Version script (scripts/set-version.ts)

All packages use fixed versioning (same version number, like Remotion/Next.js).

pnpm set-version 0.1.1 --tag    # bump all packages, commit, tag
git push origin main --tags      # triggers publish workflow

Updated CONTRIBUTING.md

  • Added development commands, test commands, package table
  • Documented the full release workflow for maintainers
  • Replaced the TODO placeholder with actual content

Prerequisites

  • Trusted Publishing configured on npmjs.com for all 5 packages
  • npm-publish environment created in GitHub repo settings

Test plan

  • YAML validated
  • pnpm set-version tested (usage help + version bump)
  • Verify workflow appears in Actions tab after merge
  • Test with a v0.1.1 tag after merging the full stack

Stack: depends on #10

@jrusso1020 jrusso1020 force-pushed the 03-23-ci_add_tag-triggered_npm_publish_workflow_with_oidc_provenance branch from 7e215c0 to 77a4c4e Compare March 23, 2026 02:08
Comment thread .github/workflows/publish.yml Outdated
Comment on lines +22 to +27
- run: pnpm install --frozen-lockfile
- run: pnpm build
- run: pnpm -r typecheck
- run: pnpm --filter @hyperframes/core test
- run: pnpm --filter @hyperframes/engine test
- run: pnpm --filter @hyperframes/core test:hyperframe-runtime-ci
Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

we are rerunning these? should we just have it depend on the other jobs that already do this?

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

Good call — removed the validate job entirely. The tag should only be pushed after CI is green on main, so re-running is redundant. The publish job now just builds and publishes.

@jrusso1020 jrusso1020 force-pushed the 03-23-ci_add_tag-triggered_npm_publish_workflow_with_oidc_provenance branch from 77a4c4e to 5a74209 Compare March 23, 2026 03:15
@jrusso1020 jrusso1020 merged commit 5a0b4ea into 03-23-ci_add_ci_pipeline_with_build_typecheck_and_test_jobs Mar 23, 2026
7 checks passed
vanceingalls added a commit that referenced this pull request Apr 16, 2026
Blockers:
- #2: late_init_set false positive on fractional opacity (0.5 matched as 0)
  Fixed: /opacity\s*:\s*0(?![.\d])/ negative lookahead
- #3: scene-1 prefix skip matches scene 10+ (s1- matches s10-)
  Fixed: extract full number and compare exactly

High severity:
- #4: autoAlpha not covered by late_init_set
  Fixed: checks both opacity and autoAlpha
- #5: al() crashes on non-hex colors (#fff shorthand, rgb(), null)
  Fixed: guard + shorthand expansion + NaN fallback
- #6: "Full palette" with null bg crashes isDark
  Fixed: null guard defaults to dark
- #7: template literals missed by tl_from_in_multiscene
  Fixed: regex includes backtick quotes

Medium:
- #9: no retry limit on eval failures → infinite loop
  Fixed: max 2 retries, then escalate to user
- #10: vague ID convention
  Fixed: explicit s{N}- prefix rule in multi-scene.md
- #11: visual-style.md backward compat
  Fixed: Step 0b checks both filenames
- #13: preview_html script injection
  Fixed: documented prohibition in design-picker.md

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
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