CLI tool to automate ChipFoundry project submission to SFTP server
Project description
ChipFoundry CLI (cf-cli)
A command-line tool to automate the submission of ChipFoundry projects to the SFTP server and manage project results.
Overview
cf-cli is a user-friendly command-line tool for securely submitting your ChipFoundry project files to the official SFTP server and downloading project results. It automatically collects the required files, generates or updates your project configuration, uploads everything to the correct location on the server, and provides tools to view project results and reports.
Installation
Install from PyPI:
pip install chipfoundry-cli
cf --help
Quick Start
-
Generate SSH Key (if you don't have one):
cf keygen -
Register your key at https://chipfoundry.io/sftp-registration
-
Configure your credentials:
cf config -
Initialize your project:
cf init -
Upload your project:
cf push -
Download results (when available):
cf pull -
View tapeout report:
cf view-tapeout-report
Project Structure Requirements
Your project directory must contain:
gds/directory with one of the following:user_project_wrapper.gds(for digital projects)user_analog_project_wrapper.gds(for analog projects)openframe_project_wrapper.gds(for openframe projects)- Note: Both compressed (
.gz) and uncompressed (.gds) files are supported
verilog/rtl/user_defines.v(required for digital/analog).cf/project.json(optional; will be created/updated automatically)
Example:
my_project/
├── gds/
│ └── user_project_wrapper.gds
├── verilog/
│ └── rtl/
│ └── user_defines.v
└── .cf/
└── project.json
Authentication
The CLI uses SSH key authentication for secure SFTP access:
- Default key location:
~/.ssh/chipfoundry-key(generated bycf keygen) - Alternative key: Specify with
--sftp-keyoption - SFTP username: Required and configured via
cf config
SFTP Server
- Default server:
sftp.chipfoundry.io - Username format:
firstname-lastname(e.g.,john-doe)
Commands
Generate SSH Key
cf keygen [--overwrite]
- Generates a new RSA SSH key at
~/.ssh/chipfoundry-key - Displays the public key for registration
- Use
--overwriteto regenerate an existing key - Next step: Submit the public key to https://chipfoundry.io/sftp-registration
View SSH Key
cf keyview
- Displays the current ChipFoundry SSH public key
- Useful for viewing your key without generating a new one
- Shows the same registration instructions as
cf keygen
Configure User Credentials
cf config
- Prompts for your SFTP username and key path
- Defaults to
~/.ssh/chipfoundry-key - Only needs to be run once per user/machine
Initialize a New Project
cf init [--project-root DIRECTORY]
- Smart defaults: Auto-detects project name from directory and project type from GDS files
- Interactive prompts: Shows detected values in prompts for easy acceptance
- Creates
.cf/project.jsonwith project metadata - Note: GDS hash is generated during
push, notinit
Push a Project (Upload)
cf push [OPTIONS]
Options:
--project-root: Specify project directory--force-overwrite: Overwrite existing files on SFTP--dry-run: Preview what would be uploaded--sftp-username: Override configured username--sftp-key: Override configured key path
What happens:
- Collects required project files
- Auto-detects project type from GDS file
- Updates project configuration and GDS hash
- Uploads files to SFTP with progress bars
- Shows clean, informative output
GDS File Handling:
- Both compressed (
.gz) and uncompressed (.gds) files are supported - No automatic compression - files are uploaded as-is
- Only one version allowed - you cannot have both compressed and uncompressed versions of the same file
- Prefers uncompressed files when available
- Falls back to compressed files if no uncompressed version is available
Pull Results (Download)
cf pull [--project-name NAME]
- Downloads project results from SFTP server
- Saves to
sftp-output/<project_name>/ - Automatically updates your local
.cf/project.jsonwith the pulled version - Creates the expected directory structure:
sftp-output/ └── <project_name>/ ├── config/ │ └── project.json └── consolidated_reports/ └── consolidated_report.html
View Tapeout Report
cf view-tapeout-report [--project-name NAME] [--report-path PATH]
- Opens the consolidated tapeout report in your default browser
- Auto-detects project name from
.cf/project.jsonif available - Looks for report at
sftp-output/<project_name>/consolidated_reports/consolidated_report.html - Options:
--project-name: Specify project name manually--report-path: Provide direct path to HTML report file
Check Status
cf status
- Lists all your projects on the SFTP server
- Shows which projects have input files and/or results
- Displays project status in a clean table format
How the GDS Hash Works
- The
user_project_wrapper_hashin.cf/project.jsonis automatically generated and updated duringpush - The hash is calculated from the actual GDS file being uploaded
- This ensures the hash always matches the file you are submitting
- You do not need to manage or update the hash manually
- The hash is NOT generated during
initbecause the GDS file may not exist or may change before submission
What Happens When You Run cf push?
-
File Collection:
- Checks for required GDS and Verilog files
- Auto-detects project type (digital, analog, openframe) based on GDS file name
- Supports both compressed and uncompressed GDS files
-
Configuration:
- Creates or updates
.cf/project.json - Updates the GDS hash and any CLI-overridden fields
- Creates or updates
-
SFTP Upload:
- Connects to the SFTP server securely
- Creates project directory structure
- Uploads files with progress indicators
- Shows clean, minimal output
-
Success:
- Displays confirmation with project location
What Happens When You Run cf pull?
-
Connection:
- Connects to SFTP server securely
- Shows clean connection status
-
Download:
- Downloads all project results recursively
- Shows professional download progress
- Saves to
sftp-output/<project_name>/
-
Config Update:
- Automatically updates your local
.cf/project.jsonwith the pulled version - No manual steps required
- Automatically updates your local
-
Success:
- Shows confirmation of downloaded files and updated config
Examples
Basic Workflow
# Generate SSH key and register it
cf keygen
# Copy the displayed key to https://chipfoundry.io/sftp-registration
# Configure your account
cf config
# Enter: john-doe
# Enter: (press Enter for default key)
# Initialize project (in your project directory)
cf init
# Project name (detected: my_awesome_project):
# Project type (digital/analog/openframe) (detected: digital):
# Upload your project
cf push
# Connecting to sftp.chipfoundry.io...
# Uploading project.json ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
# Uploading user_project_wrapper.gds ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100%
# ✓ Uploaded to incoming/projects/my_awesome_project
# Later, download results
cf pull
# ✓ Connected to sftp.chipfoundry.io
# Downloading project results from outgoing/results/my_awesome_project...
# ✓ All files downloaded to sftp-output/my_awesome_project
# ✓ Project config automatically updated
# View the tapeout report
cf view-tapeout-report
# ✓ Opened tapeout report in browser: sftp-output/my_awesome_project/consolidated_reports/consolidated_report.html
Advanced Usage
# Preview what would be uploaded
cf push --dry-run
# Force overwrite existing files
cf push --force-overwrite
# Use different project root
cf push --project-root /path/to/project
# Pull results for specific project
cf pull --project-name other_project
# View report for specific project
cf view-tapeout-report --project-name other_project
# View custom report file
cf view-tapeout-report --report-path /path/to/custom_report.html
# Check project status
cf status
GDS File Examples
# Uncompressed GDS file (preferred)
gds/user_project_wrapper.gds
# Compressed GDS file (also supported)
gds/user_project_wrapper.gds.gz
# ❌ INVALID: Both files exist - this will cause an error
gds/user_project_wrapper.gds # ← Choose ONE version only
gds/user_project_wrapper.gds.gz # ← Remove this one
Troubleshooting
-
Missing files:
- The tool will error out if required files are missing or if more than one GDS type is present
-
Authentication errors:
- Run
cf keygento generate a new key - Ensure your key is registered at https://chipfoundry.io/sftp-registration
- Check your username with
cf config
- Run
-
SFTP errors:
- Check your network connection
- Verify your credentials with
cf config
-
Project type detection:
- Only one of the recognized GDS files should be present in your
gds/directory - Both compressed and uncompressed versions of the same type are supported
- Important: You cannot have both compressed (
.gz) and uncompressed (.gds) versions of the same file - the tool will error out and ask you to remove one
- Only one of the recognized GDS files should be present in your
-
Report viewing errors:
- Ensure you've run
cf pullfirst to download the report - Check that the report exists at the expected location
- Use
--report-pathto specify a custom report location
- Ensure you've run
-
ModuleNotFoundError:
- Upgrade the CLI:
pip install --upgrade chipfoundry-cli
- Upgrade the CLI:
Support
- For help, contact info@chipfoundry.io or visit chipfoundry.io
- For bug reports or feature requests, open an issue on GitHub
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chipfoundry_cli-1.0.5.tar.gz.
File metadata
- Download URL: chipfoundry_cli-1.0.5.tar.gz
- Upload date:
- Size: 21.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8d785b2f8ef850babd6e2d006eb98fb0b47efa194c85aad0c991ee374dcbf202
|
|
| MD5 |
f26017a1c37c89e888fc7f65dd1adbed
|
|
| BLAKE2b-256 |
8b13c174ce07634fa89012507d737fe1d0862cf6ba368bd9ca77e73f01f041df
|
File details
Details for the file chipfoundry_cli-1.0.5-py3-none-any.whl.
File metadata
- Download URL: chipfoundry_cli-1.0.5-py3-none-any.whl
- Upload date:
- Size: 20.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5312fecf06b7eb25f964e1dc20e514d368515e38718a3a927a803dcfadb351dc
|
|
| MD5 |
8c28bea1be48c77ba00a239f5e14ed24
|
|
| BLAKE2b-256 |
246249433771acd093888b2b921a2ef5f5cc9fb43dee4f3ae3be48017c75033d
|