Spec: Publish All Packages to Registries
Context
All 15 framework packages are built and tested locally, but none have been published to their registries. A publish workflow already exists at .github/workflows/publish.yml that handles the 12 npm packages — it triggers on GitHub release and supports dry-run via workflow_dispatch. The non-npm packages (Laravel/Packagist, Rails/RubyGems, Flutter/pub.dev) are not yet covered by automation.
Current State
| Registry |
Packages |
CI Automated |
Status |
| npm |
12 (core, react, vue, svelte, angular, solid, lit, preact, qwik, alpine, vanilla, astro) |
✅ publish.yml exists |
🔴 Not yet published |
| Packagist |
1 (ajentik/doo-iconik-laravel) |
❌ |
🔴 Not yet published |
| RubyGems |
1 (doo_iconik) |
❌ |
🔴 Not yet published |
| pub.dev |
1 (doo_iconik) |
❌ |
🔴 Not yet published |
Pre-Publish Checklist
1. npm Org Setup
2. Package Metadata Audit
All npm packages need these fields validated before publish:
| Field |
Status |
name |
✅ All use @doo-iconik/ scope |
version |
✅ All 1.0.0 |
license |
✅ All MIT |
main / module / types / exports |
✅ Present in all |
files |
⚠️ Only includes dist (or src for astro) — LICENSE and README.md are excluded |
repository |
✅ All correct |
keywords |
✅ All present |
3. LICENSE + README in Published Artifacts
Critical fix needed: No package includes LICENSE or README.md in its files array. npm will not include them in the tarball. Update every package:
// For most packages:
"files": ["dist", "LICENSE", "README.md"]
// For astro:
"files": ["src", "LICENSE", "README.md"]
Also copy LICENSE from root into each package directory (or use npm's automatic root LICENSE detection — but explicit is safer for a monorepo).
4. Core Dependency Resolution
All framework packages use "@doo-iconik/core": "file:../core" for local dev. Before publishing:
Publish Sequence
1. core (no dependencies)
2. All others (depend on core ^1.0.0)
npm Publish (12 packages)
- Handled by
.github/workflows/publish.yml
- Triggers on GitHub release creation
- Uses
--access public flag
- Supports
--dry-run via workflow_dispatch
Packagist Publish (Laravel)
RubyGems Publish (Rails)
pub.dev Publish (Flutter)
Files to Change
- All 12 npm
package.json files — add LICENSE, README.md to files; change @doo-iconik/core from file:../core to ^1.0.0
- Copy root
LICENSE into each package directory
.github/workflows/publish.yml — add test gate, add --provenance flag
- Optionally add Packagist/RubyGems/pub.dev publish jobs
Acceptance Criteria
Estimated Effort
~3–4 hours (npm setup + publish + non-npm registries)
Refs #1
Spec: Publish All Packages to Registries
Context
All 15 framework packages are built and tested locally, but none have been published to their registries. A publish workflow already exists at
.github/workflows/publish.ymlthat handles the 12 npm packages — it triggers on GitHub release and supports dry-run viaworkflow_dispatch. The non-npm packages (Laravel/Packagist, Rails/RubyGems, Flutter/pub.dev) are not yet covered by automation.Current State
core,react,vue,svelte,angular,solid,lit,preact,qwik,alpine,vanilla,astro)publish.ymlexistsajentik/doo-iconik-laravel)doo_iconik)doo_iconik)Pre-Publish Checklist
1. npm Org Setup
@doo-iconiknpm org (if not exists)NPM_TOKENrepo secret2. Package Metadata Audit
All npm packages need these fields validated before publish:
name@doo-iconik/scopeversion1.0.0licenseMITmain/module/types/exportsfilesdist(orsrcfor astro) — LICENSE and README.md are excludedrepositorykeywords3. LICENSE + README in Published Artifacts
Critical fix needed: No package includes
LICENSEorREADME.mdin itsfilesarray. npm will not include them in the tarball. Update every package:Also copy
LICENSEfrom root into each package directory (or use npm's automatic root LICENSE detection — but explicit is safer for a monorepo).4. Core Dependency Resolution
All framework packages use
"@doo-iconik/core": "file:../core"for local dev. Before publishing:"@doo-iconik/core": "^1.0.0"in each package'sdependencies(or the publish workflow must handle this)corefirst, then all otherspublish.ymlpublishescorefirst in its loop — verify this worksPublish Sequence
npm Publish (12 packages)
.github/workflows/publish.yml--access publicflag--dry-runvia workflow_dispatchPackagist Publish (Laravel)
ajentik/doo-iconik-laravelon packagist.orgcomposer.jsonversionfield or use git tagsRubyGems Publish (Rails)
cd packages/rails && gem build doo_iconik.gemspec && gem push doo_iconik-1.0.0.gemGEM_HOST_API_KEYsecretpub.dev Publish (Flutter)
cd packages/flutter && dart pub publishhomepageandrepositorytopubspec.yamlFiles to Change
package.jsonfiles — addLICENSE,README.mdtofiles; change@doo-iconik/corefromfile:../coreto^1.0.0LICENSEinto each package directory.github/workflows/publish.yml— add test gate, add--provenanceflagAcceptance Criteria
@doo-iconik/coreinstallable from npmnpm install @doo-iconik/reactresolves@doo-iconik/corefrom npm (notfile:)Estimated Effort
~3–4 hours (npm setup + publish + non-npm registries)
Refs #1