You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add final tapeout confirmation command and update project submission workflow in README
- Introduced `cf confirm` command to set `submission_state` to "Final" and upload project.json to SFTP.
- Enhanced README with detailed instructions on confirming final tapeout and project submission states.
- Updated project.json initialization to include `submission_state` defaulting to "Draft".
- Implemented version auto-increment logic based on GDS hash changes in project.json.
-**Confirms your final tapeout** by setting `submission_state` to "Final"
209
+
-**Uploads only the project.json** to the SFTP server (not the entire project)
210
+
-**Use this when you're ready to send your current GDS file to the foundry** for tapeout processing
211
+
-**Options:**
212
+
-`--project-root`: Specify project directory
213
+
-`--project-name`: Override project name
214
+
-`--sftp-username`: Override configured username
215
+
-`--sftp-key`: Override configured key path
216
+
217
+
**Important:** This command confirms that your current GDS file is ready to be sent to the foundry for tapeout. Only run this when you are completely satisfied with your design and ready for final tapeout processing. This action cannot be easily undone.
218
+
196
219
### View Tapeout Report
197
220
198
221
```bash
@@ -218,6 +241,47 @@ cf status
218
241
219
242
---
220
243
244
+
## Submission Workflow and States
245
+
246
+
The CLI tracks your project submission state through the `submission_state` field in `project.json`:
247
+
248
+
### Project States
249
+
250
+
-**"Draft"** - Initial state when you run `cf init`
251
+
- Project is ready for development and testing
252
+
- You can push updates multiple times
253
+
- Project is not yet ready for tapeout processing
254
+
255
+
-**"Final"** - Confirmed state when you run `cf confirm`
256
+
- GDS file is ready to be sent to the foundry for tapeout
257
+
- No further changes should be made to the design
258
+
- Only the project.json is uploaded (not the full project)
259
+
260
+
### Recommended Workflow
261
+
262
+
1.**Development Phase:**
263
+
```bash
264
+
cf init # Creates project with submission_state: "Draft"
cf pull # Download results for review (if available)
273
+
cf view-tapeout-report # Review the tapeout report (if available)
274
+
```
275
+
276
+
3.**Final Tapeout Confirmation:**
277
+
```bash
278
+
cf confirm # Confirm current GDS file is ready for foundry tapeout
279
+
```
280
+
281
+
**Important:** Only run `cf confirm` when you are completely satisfied with your GDS file and ready to send it to the foundry for tapeout processing. This action cannot be easily undone.
282
+
283
+
---
284
+
221
285
## How the GDS Hash Works
222
286
223
287
- The `user_project_wrapper_hash` in `.cf/project.json` is **automatically generated and updated during `push`**
@@ -303,9 +367,15 @@ cf pull
303
367
# ✓ All files downloaded to sftp-output/my_awesome_project
304
368
# ✓ Project config automatically updated
305
369
306
-
#View the tapeout report
370
+
#Review the tapeout report (if available)
307
371
cf view-tapeout-report
308
372
# ✓ Opened tapeout report in browser: sftp-output/my_awesome_project/consolidated_reports/consolidated_report.html
373
+
374
+
# When ready, confirm final tapeout (sends GDS to foundry)
375
+
cf confirm
376
+
# ✓ Updated project.json with submission_state = Final
console.print(f"[red]Failed to open tapeout report in browser: {e}[/red]")
771
772
raiseclick.Abort()
772
773
774
+
@main.command('confirm')
775
+
@click.option('--project-root', required=False, type=click.Path(exists=True, file_okay=False), help='Path to the local ChipFoundry project directory (defaults to current directory if .cf/project.json exists).')
776
+
@click.option('--sftp-host', default=DEFAULT_SFTP_HOST, show_default=True, help='SFTP server hostname.')
777
+
@click.option('--sftp-username', required=False, help='SFTP username (defaults to config).')
778
+
@click.option('--sftp-key', type=click.Path(exists=True, dir_okay=False), help='Path to SFTP private key file (defaults to config).', default=None, show_default=False)
779
+
@click.option('--project-name', help='Project name (e.g., "my_project"). Overrides project.json if exists.')
0 commit comments