putitoutthere 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/README.md +115 -5
  2. package/dist/action.d.ts +6 -4
  3. package/dist/action.d.ts.map +1 -1
  4. package/dist/action.js +24 -9
  5. package/dist/action.js.map +1 -1
  6. package/dist/cascade.d.ts.map +1 -1
  7. package/dist/cascade.js +2 -0
  8. package/dist/cascade.js.map +1 -1
  9. package/dist/cli.d.ts +10 -3
  10. package/dist/cli.d.ts.map +1 -1
  11. package/dist/cli.js +161 -13
  12. package/dist/cli.js.map +1 -1
  13. package/dist/completeness.js +13 -0
  14. package/dist/completeness.js.map +1 -1
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +5 -0
  17. package/dist/config.js.map +1 -1
  18. package/dist/doctor.d.ts +26 -0
  19. package/dist/doctor.d.ts.map +1 -0
  20. package/dist/doctor.js +45 -0
  21. package/dist/doctor.js.map +1 -0
  22. package/dist/git.d.ts +1 -0
  23. package/dist/git.d.ts.map +1 -1
  24. package/dist/git.js +12 -0
  25. package/dist/git.js.map +1 -1
  26. package/dist/handlers/crates.d.ts +24 -3
  27. package/dist/handlers/crates.d.ts.map +1 -1
  28. package/dist/handlers/crates.js +122 -13
  29. package/dist/handlers/crates.js.map +1 -1
  30. package/dist/handlers/npm-platform.d.ts +60 -0
  31. package/dist/handlers/npm-platform.d.ts.map +1 -0
  32. package/dist/handlers/npm-platform.js +203 -0
  33. package/dist/handlers/npm-platform.js.map +1 -0
  34. package/dist/handlers/npm.d.ts +7 -2
  35. package/dist/handlers/npm.d.ts.map +1 -1
  36. package/dist/handlers/npm.js +140 -12
  37. package/dist/handlers/npm.js.map +1 -1
  38. package/dist/handlers/pypi.d.ts +19 -1
  39. package/dist/handlers/pypi.d.ts.map +1 -1
  40. package/dist/handlers/pypi.js +146 -11
  41. package/dist/handlers/pypi.js.map +1 -1
  42. package/dist/init.d.ts +33 -0
  43. package/dist/init.d.ts.map +1 -0
  44. package/dist/init.js +94 -0
  45. package/dist/init.js.map +1 -0
  46. package/dist/log.d.ts.map +1 -1
  47. package/dist/log.js +6 -1
  48. package/dist/log.js.map +1 -1
  49. package/dist/plan.d.ts +28 -0
  50. package/dist/plan.d.ts.map +1 -0
  51. package/dist/plan.js +218 -0
  52. package/dist/plan.js.map +1 -0
  53. package/dist/publish.d.ts +35 -0
  54. package/dist/publish.d.ts.map +1 -0
  55. package/dist/publish.js +188 -0
  56. package/dist/publish.js.map +1 -0
  57. package/dist/release.d.ts +36 -0
  58. package/dist/release.d.ts.map +1 -0
  59. package/dist/release.js +102 -0
  60. package/dist/release.js.map +1 -0
  61. package/dist/retry.js +1 -0
  62. package/dist/retry.js.map +1 -1
  63. package/dist/templates.d.ts +22 -0
  64. package/dist/templates.d.ts.map +1 -0
  65. package/dist/templates.js +222 -0
  66. package/dist/templates.js.map +1 -0
  67. package/dist/trailer.js +1 -0
  68. package/dist/trailer.js.map +1 -1
  69. package/dist/types.d.ts +14 -4
  70. package/dist/types.d.ts.map +1 -1
  71. package/dist/types.js.map +1 -1
  72. package/package.json +7 -6
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Workflow templates emitted by `putitoutthere init`.
3
+ *
4
+ * Per plan.md §9.2 (immediate), §9.4 (scheduled), §9.5 (PR check).
5
+ *
6
+ * The `release.yml` templates follow the three-job shape
7
+ * (plan → build → publish) so users can drop their build tooling into
8
+ * the middle job without forking the orchestrator. Build steps are
9
+ * keyed on `matrix.kind` (crates | pypi | npm) and `matrix.build`
10
+ * (vanilla | maturin | napi | bundled-cli) so the right builder runs
11
+ * per row.
12
+ *
13
+ * Issue #25. Plan: §9.
14
+ */
15
+ export type Cadence = 'immediate' | 'scheduled';
16
+ export declare const TOML_SKELETON = "# Put It Out There \u2014 release orchestration config.\n# Docs: https://github.com/thekevinscott/put-it-out-there\n\n[putitoutthere]\nversion = 1\n\n# Declare one [[package]] block per releasable artifact. Example:\n#\n# [[package]]\n# name = \"my-crate\"\n# kind = \"crates\"\n# path = \"crates/my-crate\"\n# paths = [\"crates/my-crate/**\", \"Cargo.toml\", \"Cargo.lock\"]\n# first_version = \"0.1.0\"\n";
17
+ export declare const AGENTS_MD = "# Release signaling for Put It Out There\n\nWhen you finish a unit of work and are preparing a PR or commit, add a git\ntrailer to the commit message body to signal a release:\n\n release: <patch|minor|major|skip>\n\nRules:\n- Omit the trailer for docs-only, CI-only, or internal-only changes.\n- `patch` for bug fixes or internal refactors that don't change public API.\n- `minor` for new features that are backwards-compatible.\n- `major` for breaking changes.\n- `skip` to suppress release when path filters would otherwise cascade.\n\nThe trailer on the merge commit determines the release. If merging via\n\"Squash and merge,\" include the trailer in the PR description so it ends up\nin the squashed commit body.\n\n## Scoping a release to specific packages\n\nTo release a subset of packages in a polyglot repo, append a bracketed list:\n\n release: minor [dirsql-rust, dirsql-python]\n\nPackages named in the list are bumped with the specified version. Other\npackages cascaded by path filters still get a `patch`. Packages in the\nlist that *aren't* cascaded are force-included.\n";
18
+ export declare const RELEASE_YML_IMMEDIATE: string;
19
+ export declare const RELEASE_YML_SCHEDULED: string;
20
+ export declare const CHECK_YML = "name: Putitoutthere check\n\non:\n pull_request:\n branches: [main]\n\npermissions:\n contents: read\n pull-requests: read\n\njobs:\n dry-run:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n with:\n fetch-depth: 0\n - uses: thekevinscott/put-it-out-there@v0\n with:\n command: plan\n dry_run: true\n fail_on_error: true\n";
21
+ export declare function releaseYml(cadence: Cadence): string;
22
+ //# sourceMappingURL=templates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,WAAW,CAAC;AAEhD,eAAO,MAAM,aAAa,2ZAczB,CAAC;AAEF,eAAO,MAAM,SAAS,4kCA2BrB,CAAC;AA8IF,eAAO,MAAM,qBAAqB,QAAsE,CAAC;AACzG,eAAO,MAAM,qBAAqB,QAAsE,CAAC;AAEzG,eAAO,MAAM,SAAS,iaAsBrB,CAAC;AAEF,wBAAgB,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAGnD"}
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Workflow templates emitted by `putitoutthere init`.
3
+ *
4
+ * Per plan.md §9.2 (immediate), §9.4 (scheduled), §9.5 (PR check).
5
+ *
6
+ * The `release.yml` templates follow the three-job shape
7
+ * (plan → build → publish) so users can drop their build tooling into
8
+ * the middle job without forking the orchestrator. Build steps are
9
+ * keyed on `matrix.kind` (crates | pypi | npm) and `matrix.build`
10
+ * (vanilla | maturin | napi | bundled-cli) so the right builder runs
11
+ * per row.
12
+ *
13
+ * Issue #25. Plan: §9.
14
+ */
15
+ export const TOML_SKELETON = `# Put It Out There — release orchestration config.
16
+ # Docs: https://github.com/thekevinscott/put-it-out-there
17
+
18
+ [putitoutthere]
19
+ version = 1
20
+
21
+ # Declare one [[package]] block per releasable artifact. Example:
22
+ #
23
+ # [[package]]
24
+ # name = "my-crate"
25
+ # kind = "crates"
26
+ # path = "crates/my-crate"
27
+ # paths = ["crates/my-crate/**", "Cargo.toml", "Cargo.lock"]
28
+ # first_version = "0.1.0"
29
+ `;
30
+ export const AGENTS_MD = `# Release signaling for Put It Out There
31
+
32
+ When you finish a unit of work and are preparing a PR or commit, add a git
33
+ trailer to the commit message body to signal a release:
34
+
35
+ release: <patch|minor|major|skip>
36
+
37
+ Rules:
38
+ - Omit the trailer for docs-only, CI-only, or internal-only changes.
39
+ - \`patch\` for bug fixes or internal refactors that don't change public API.
40
+ - \`minor\` for new features that are backwards-compatible.
41
+ - \`major\` for breaking changes.
42
+ - \`skip\` to suppress release when path filters would otherwise cascade.
43
+
44
+ The trailer on the merge commit determines the release. If merging via
45
+ "Squash and merge," include the trailer in the PR description so it ends up
46
+ in the squashed commit body.
47
+
48
+ ## Scoping a release to specific packages
49
+
50
+ To release a subset of packages in a polyglot repo, append a bracketed list:
51
+
52
+ release: minor [dirsql-rust, dirsql-python]
53
+
54
+ Packages named in the list are bumped with the specified version. Other
55
+ packages cascaded by path filters still get a \`patch\`. Packages in the
56
+ list that *aren't* cascaded are force-included.
57
+ `;
58
+ const BUILD_JOB = ` build:
59
+ needs: plan
60
+ if: fromJSON(needs.plan.outputs.matrix || '[]')[0] != null
61
+ strategy:
62
+ fail-fast: false
63
+ matrix:
64
+ include: \${{ fromJSON(needs.plan.outputs.matrix) }}
65
+ runs-on: \${{ matrix.runs_on }}
66
+ steps:
67
+ - uses: actions/checkout@v4
68
+ with:
69
+ fetch-depth: 0
70
+ - name: Setup Rust (if crates)
71
+ if: matrix.kind == 'crates'
72
+ uses: dtolnay/rust-toolchain@stable
73
+ - name: Build crate
74
+ if: matrix.kind == 'crates'
75
+ run: cargo package --manifest-path \${{ matrix.path }}/Cargo.toml --target-dir \${{ matrix.path }}/target
76
+ - name: Setup Python (if pypi)
77
+ if: matrix.kind == 'pypi'
78
+ uses: actions/setup-python@v5
79
+ with:
80
+ python-version: '3.12'
81
+ - name: Build wheel (maturin)
82
+ if: matrix.kind == 'pypi' && matrix.build == 'maturin'
83
+ uses: PyO3/maturin-action@v1
84
+ with:
85
+ command: build
86
+ args: --release --out \${{ matrix.path }}/dist \${{ matrix.target == 'sdist' && '--sdist' || format('--target {0}', matrix.target) }}
87
+ working-directory: \${{ matrix.path }}
88
+ - name: Build sdist (setuptools/hatch)
89
+ if: matrix.kind == 'pypi' && matrix.build != 'maturin' && matrix.target == 'sdist'
90
+ run: |
91
+ cd \${{ matrix.path }}
92
+ python -m pip install build
93
+ python -m build --sdist --outdir dist
94
+ - name: Setup Node (if npm)
95
+ if: matrix.kind == 'npm'
96
+ uses: actions/setup-node@v4
97
+ with:
98
+ node-version: '20'
99
+ - name: Build npm package
100
+ if: matrix.kind == 'npm'
101
+ run: |
102
+ cd \${{ matrix.path }}
103
+ npm ci
104
+ npm run build --if-present
105
+ - uses: actions/upload-artifact@v4
106
+ with:
107
+ name: \${{ matrix.artifact_name }}
108
+ path: \${{ matrix.artifact_path }}
109
+ `;
110
+ const PUBLISH_JOB = ` publish:
111
+ needs: [plan, build]
112
+ runs-on: ubuntu-latest
113
+ permissions:
114
+ contents: write
115
+ id-token: write
116
+ steps:
117
+ - uses: actions/checkout@v4
118
+ with:
119
+ fetch-depth: 0
120
+ - uses: actions/setup-node@v4
121
+ with:
122
+ node-version: '24'
123
+ registry-url: 'https://registry.npmjs.org'
124
+ - uses: actions/download-artifact@v4
125
+ with:
126
+ path: artifacts
127
+ - uses: thekevinscott/put-it-out-there@v0
128
+ with:
129
+ command: publish
130
+ dry_run: \${{ inputs.dry_run || 'false' }}
131
+ env:
132
+ NODE_AUTH_TOKEN: \${{ secrets.NPM_TOKEN }}
133
+ CARGO_REGISTRY_TOKEN: \${{ secrets.CARGO_TOKEN }}
134
+ PYPI_API_TOKEN: \${{ secrets.PYPI_API_TOKEN }}
135
+ `;
136
+ const PLAN_JOB = ` plan:
137
+ runs-on: ubuntu-latest
138
+ outputs:
139
+ matrix: \${{ steps.plan.outputs.matrix }}
140
+ steps:
141
+ - uses: actions/checkout@v4
142
+ with:
143
+ fetch-depth: 0
144
+ - id: plan
145
+ uses: thekevinscott/put-it-out-there@v0
146
+ with:
147
+ command: plan
148
+ `;
149
+ const IMMEDIATE_HEADER = `name: Release
150
+
151
+ on:
152
+ push:
153
+ branches: [main]
154
+ workflow_dispatch:
155
+ inputs:
156
+ dry_run:
157
+ description: 'Dry-run: compute plan, skip publish + tag'
158
+ type: boolean
159
+ default: false
160
+
161
+ concurrency:
162
+ group: release
163
+ cancel-in-progress: false
164
+
165
+ permissions:
166
+ contents: read
167
+ id-token: write
168
+
169
+ jobs:
170
+ `;
171
+ const SCHEDULED_HEADER = `name: Release (scheduled)
172
+
173
+ on:
174
+ schedule:
175
+ - cron: '0 2 * * *'
176
+ workflow_dispatch:
177
+ inputs:
178
+ dry_run:
179
+ description: 'Dry-run: compute plan, skip publish + tag'
180
+ type: boolean
181
+ default: false
182
+
183
+ concurrency:
184
+ group: release
185
+ cancel-in-progress: false
186
+
187
+ permissions:
188
+ contents: read
189
+ id-token: write
190
+
191
+ jobs:
192
+ `;
193
+ export const RELEASE_YML_IMMEDIATE = IMMEDIATE_HEADER + PLAN_JOB + '\n' + BUILD_JOB + '\n' + PUBLISH_JOB;
194
+ export const RELEASE_YML_SCHEDULED = SCHEDULED_HEADER + PLAN_JOB + '\n' + BUILD_JOB + '\n' + PUBLISH_JOB;
195
+ export const CHECK_YML = `name: Putitoutthere check
196
+
197
+ on:
198
+ pull_request:
199
+ branches: [main]
200
+
201
+ permissions:
202
+ contents: read
203
+ pull-requests: read
204
+
205
+ jobs:
206
+ dry-run:
207
+ runs-on: ubuntu-latest
208
+ steps:
209
+ - uses: actions/checkout@v4
210
+ with:
211
+ fetch-depth: 0
212
+ - uses: thekevinscott/put-it-out-there@v0
213
+ with:
214
+ command: plan
215
+ dry_run: true
216
+ fail_on_error: true
217
+ `;
218
+ export function releaseYml(cadence) {
219
+ /* v8 ignore next -- exhaustive switch */
220
+ return cadence === 'scheduled' ? RELEASE_YML_SCHEDULED : RELEASE_YML_IMMEDIATE;
221
+ }
222
+ //# sourceMappingURL=templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"templates.js","sourceRoot":"","sources":["../src/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAc5B,CAAC;AAEF,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2BxB,CAAC;AAEF,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDjB,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;CAyBnB,CAAC;AAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;CAYhB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC;AAEF,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;CAqBxB,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC;AACzG,MAAM,CAAC,MAAM,qBAAqB,GAAG,gBAAgB,GAAG,QAAQ,GAAG,IAAI,GAAG,SAAS,GAAG,IAAI,GAAG,WAAW,CAAC;AAEzG,MAAM,CAAC,MAAM,SAAS,GAAG;;;;;;;;;;;;;;;;;;;;;;CAsBxB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,OAAgB;IACzC,yCAAyC;IACzC,OAAO,OAAO,KAAK,WAAW,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,qBAAqB,CAAC;AACjF,CAAC"}
package/dist/trailer.js CHANGED
@@ -63,6 +63,7 @@ function isValidValue(s) {
63
63
  }
64
64
  function parsePackageList(s) {
65
65
  // Must open with `[` and close with `]`; nothing after the close.
66
+ /* v8 ignore next -- only called when bracketIdx is defined; defensive */
66
67
  if (!s.startsWith('['))
67
68
  return null;
68
69
  const closeIdx = s.indexOf(']');
@@ -1 +1 @@
1
- {"version":3,"file":"trailer.js","sourceRoot":"","sources":["../src/trailer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAUH,MAAM,YAAY,GAAG,IAAI,GAAG,CAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzE,wEAAwE;AACxE,0EAA0E;AAC1E,uEAAuE;AACvE,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD,wEAAwE;AACxE,2DAA2D;AAC3D,MAAM,YAAY,GAAG,8BAA8B,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACxC,gDAAgD;IAChD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;QACvB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;YAC5C,wCAAwC;YACxC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,OAAe;IACnC,yDAAyD;IACzD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,SAAS,GAAG,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAEtF,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC5C,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,YAAY,CAAC,GAAG,CAAC,CAAU,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAS;IACjC,kEAAkE;IAClE,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAChC,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,CAAC,wBAAwB;IAC1D,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1C,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,oCAAoC;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"trailer.js","sourceRoot":"","sources":["../src/trailer.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -8,15 +8,19 @@
8
8
  */
9
9
  export type Kind = 'crates' | 'pypi' | 'npm';
10
10
  export type Bump = 'patch' | 'minor' | 'major';
11
- /** Shape filled in by #5. */
11
+ /**
12
+ * Shape handlers see. Optional fields explicitly allow `undefined` so
13
+ * the Zod-parsed `Package` (discriminated union from src/config.ts)
14
+ * assigns cleanly under exactOptionalPropertyTypes.
15
+ */
12
16
  export interface PackageConfig {
13
17
  name: string;
14
18
  kind: Kind;
15
19
  path: string;
16
20
  paths: string[];
17
- depends_on?: string[];
18
- first_version?: string;
19
- smoke?: string;
21
+ depends_on?: string[] | undefined;
22
+ first_version?: string | undefined;
23
+ smoke?: string | undefined;
20
24
  [key: string]: unknown;
21
25
  }
22
26
  /** Shape filled in by #5. */
@@ -33,6 +37,12 @@ export interface Ctx {
33
37
  log: Logger;
34
38
  env: Record<string, string>;
35
39
  artifacts: ArtifactStore;
40
+ /**
41
+ * Where `actions/download-artifact@v4` dumped the per-row artifacts.
42
+ * Conventionally `${cwd}/artifacts`. Handlers scan this for the files
43
+ * they need to upload. Optional so local/doctor flows can omit.
44
+ */
45
+ artifactsRoot?: string;
36
46
  }
37
47
  export interface Logger {
38
48
  debug(msg: string, fields?: Record<string, unknown>): void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAqEH,2CAA2C;AAC3C,MAAM,OAAO,SAAU,SAAQ,KAAK;IAChB,IAAI,GAAG,WAAW,CAAC;CACtC;AAED,4DAA4D;AAC5D,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;CAC3C"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA+EH,2CAA2C;AAC3C,MAAM,OAAO,SAAU,SAAQ,KAAK;IAChB,IAAI,GAAG,WAAW,CAAC;CACtC;AAED,4DAA4D;AAC5D,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;CAC3C"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "putitoutthere",
3
- "version": "0.0.1",
3
+ "version": "0.1.0",
4
4
  "description": "Polyglot release orchestrator for crates.io, PyPI, and npm",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -36,16 +36,17 @@
36
36
  "test:unit": "vitest run",
37
37
  "test:unit:watch": "vitest",
38
38
  "test:unit:coverage": "vitest run --coverage",
39
- "test:integration": "echo 'integration suite lands in tests/integration/ via #27' && exit 0",
40
- "test:e2e": "echo 'e2e suite lands in tests/e2e/ via #28' && exit 0"
39
+ "test:integration": "vitest run --config test/integration/vitest.integration.config.ts",
40
+ "test:e2e": "pnpm run build && vitest run --config test/e2e/vitest.e2e.config.ts"
41
41
  },
42
42
  "devDependencies": {
43
43
  "@eslint/js": "^9.12.0",
44
- "@types/node": "^20.16.0",
44
+ "@types/node": "^25.6.0",
45
45
  "@vercel/ncc": "^0.38.0",
46
46
  "@vitest/coverage-v8": "^2.1.0",
47
- "eslint": "^9.12.0",
48
- "typescript": "^5.6.0",
47
+ "eslint": "^10.2.1",
48
+ "msw": "^2.13.4",
49
+ "typescript": "^6.0.3",
49
50
  "typescript-eslint": "^8.8.0",
50
51
  "vitest": "^2.1.0"
51
52
  },