mirror of
https://staging.allspice.dev/AllSpice-Demos/Actions-demo.git
synced 2025-04-23 17:03:42 +00:00
Combine workflows 03-04 into 03, rename 05 to 04-Generate-netlist.yml
This commit is contained in:
parent
38ea775721
commit
926d9d6030
104
.allspice/utils/generate_netlist.py
Normal file
104
.allspice/utils/generate_netlist.py
Normal file
@ -0,0 +1,104 @@
|
||||
#! /usr/bin/env python3
|
||||
|
||||
# Generate a Netlist from a PcbDoc file.
|
||||
# For more information, read the README file in this directory.
|
||||
|
||||
import argparse
|
||||
import os
|
||||
import sys
|
||||
from contextlib import ExitStack
|
||||
|
||||
from allspice import AllSpice
|
||||
from allspice.utils.netlist_generation import generate_netlist
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("Hello World")
|
||||
# Parse command line arguments. If you're writing a special purpose script,
|
||||
# you can hardcode these values instead of using command line arguments.
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="generate_pcb_netlist", description="Generate a netlist from a PCB file."
|
||||
)
|
||||
parser.add_argument("repository", help="The repo containing the project")
|
||||
parser.add_argument(
|
||||
"pcb_file",
|
||||
help="The path to the PCB file in the source repo.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--source_ref",
|
||||
help="The git reference the netlist should be generated for (eg. branch name, tag name, commit SHA). Defaults to main.",
|
||||
default="main",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--allspice_hub_url",
|
||||
help="The URL of your AllSpice Hub instance. Defaults to https://hub.allspice.io.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--output_file",
|
||||
help="The path to the output file. If absent, the output will direct to the command line.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# Use Environment Variables to store your auth token. This keeps your token
|
||||
# secure when sharing code.
|
||||
auth_token = os.environ.get("ALLSPICE_AUTH_TOKEN")
|
||||
if auth_token is None:
|
||||
print("Please set the environment variable ALLSPICE_AUTH_TOKEN")
|
||||
exit(1)
|
||||
|
||||
if args.allspice_hub_url is None:
|
||||
allspice = AllSpice(token_text=auth_token)
|
||||
else:
|
||||
allspice = AllSpice(
|
||||
token_text=auth_token, allspice_hub_url=args.allspice_hub_url
|
||||
)
|
||||
|
||||
try:
|
||||
# Test connection and key
|
||||
print("AllSpice Version: " + allspice.get_version())
|
||||
|
||||
# Test private API call
|
||||
print("API-Token belongs to user: " + allspice.get_user().username)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Could not connect to AllSpice Hub: {e}")
|
||||
exit(1)
|
||||
|
||||
repo_owner, repo_name = args.repository.split("/")
|
||||
try:
|
||||
print(f"repo_owner={repo_owner}, repo_name={repo_name}")
|
||||
repository = allspice.get_repository(repo_owner, repo_name)
|
||||
except Exception as e:
|
||||
print(f"Could not find repository {args.repository}: {e}")
|
||||
exit(1)
|
||||
pcb_file = args.pcb_file
|
||||
|
||||
print("Generating PCB Netlist...🏃", file=sys.stderr)
|
||||
|
||||
netlist_rows = generate_netlist(
|
||||
allspice,
|
||||
repository,
|
||||
pcb_file,
|
||||
args.source_ref,
|
||||
)
|
||||
|
||||
with ExitStack() as stack:
|
||||
if args.output_file is not None:
|
||||
writer = stack.enter_context(open(args.output_file, "w"))
|
||||
else:
|
||||
writer = sys.stdout
|
||||
|
||||
nets = list(netlist_rows.keys())
|
||||
|
||||
# It's helpful to sort here to generate repeatable netlist files
|
||||
nets.sort()
|
||||
|
||||
# You can change formatting here
|
||||
for net in nets:
|
||||
writer.write(net + "\n")
|
||||
pins_on_net = netlist_rows[net]
|
||||
pins_on_net.sort()
|
||||
writer.write(" " + " ".join(pins_on_net) + "\n")
|
||||
|
||||
print("Generated PCB netlist.", file=sys.stderr)
|
1
.allspice/utils/hello-world.py
Normal file
1
.allspice/utils/hello-world.py
Normal file
@ -0,0 +1 @@
|
||||
print("Hello World!")
|
57
.allspice/utils/py-allspice-BIST.py
Normal file
57
.allspice/utils/py-allspice-BIST.py
Normal file
@ -0,0 +1,57 @@
|
||||
# HelloWorld.py
|
||||
|
||||
# If you're new to scripting, this is a great place to start.
|
||||
|
||||
# Hello World starts you out easy with some simple server requests.
|
||||
# This will help you troubleshoot your connection and show you the basics of making an api request
|
||||
#
|
||||
# For more information read our README.md
|
||||
from allspice import AllSpice
|
||||
import argparse, sys
|
||||
|
||||
|
||||
|
||||
|
||||
print("Starting Test")
|
||||
|
||||
parser = argparse.ArgumentParser(
|
||||
prog="Allspice_API_BIST", description="Test connection and execution of API actions"
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
"--allspice_hub_url",
|
||||
help="The URL of your AllSpice Hub instance. Defaults to https://hub.allspice.io.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--allspice_token",
|
||||
help="Your AllSpice application token. Generate a token: https://hub.allspice.io/user/settings/applications",
|
||||
)
|
||||
|
||||
print("Parsing args")
|
||||
args = parser.parse_args()
|
||||
|
||||
auth_token = args.allspice_token
|
||||
if auth_token is None:
|
||||
print("Please supply a token with --allspice_token <your_token> Generate a token: https://hub.allspice.io/user/settings/applications")
|
||||
sys.exit(1)
|
||||
print(f"Auth token {auth_token}")
|
||||
|
||||
if args.allspice_hub_url is None:
|
||||
allspice = AllSpice(token_text="https://hub.allspice.io")
|
||||
else:
|
||||
try:
|
||||
allspice = AllSpice(
|
||||
token_text=auth_token, allspice_hub_url=args.allspice_hub_url
|
||||
)
|
||||
except Exception as e:
|
||||
print("Error")
|
||||
sys.exit(1)
|
||||
|
||||
print("Finish making connection")
|
||||
# Test connection and key
|
||||
print("AllSpice Version: " + allspice.get_version())
|
||||
|
||||
# Test private API call
|
||||
print("API-Token belongs to user: " + allspice.get_user().username)
|
||||
|
||||
print("End test")
|
2
.allspice/utils/requirements.txt
Normal file
2
.allspice/utils/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
||||
py-allspice
|
||||
rich
|
@ -28,6 +28,7 @@ jobs:
|
||||
"description": ["PART DESCRIPTION"],
|
||||
"designator": ["Designator"]
|
||||
}'
|
||||
|
||||
# Print bom.csv to terminal
|
||||
- name: Show BOM
|
||||
run: cat bom.csv
|
||||
|
56
.allspice/workflows/03-Python-py-allspice.yml
Normal file
56
.allspice/workflows/03-Python-py-allspice.yml
Normal file
@ -0,0 +1,56 @@
|
||||
|
||||
# Python-py-allspice demo repository
|
||||
# This repository demonstrates how to use Python and py-allspice to interact with the AllSpice API
|
||||
# AllSpice Actions documentation: https://learn.allspice.io/docs/actions-cicd
|
||||
name: Python-py-allspice
|
||||
on:
|
||||
push:
|
||||
issues:
|
||||
types: [opened, closed, reopened]
|
||||
|
||||
jobs:
|
||||
py-allspice test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Check out repository code
|
||||
- name: "[📚->🖥️] Check out repository code"
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: "[🔎->📂] List files in repo 🔎"
|
||||
run: |
|
||||
ls -la ${{ github.workspace }}
|
||||
|
||||
# Installs python requirements from the requirements.txt file
|
||||
- name: "[🤼->🖥️] Install python requirements"
|
||||
run: pip install -r .allspice/utils/requirements.txt
|
||||
|
||||
# Call a python script from the .allspice/hub directory
|
||||
- name: "[🏃->🐍] Run .allspice/hub/hello-world.py 🔎"
|
||||
run: python .allspice/hub/hello-world.py
|
||||
|
||||
# Run the py-allspice self-test script, this will ping the server and verify the API is working
|
||||
# Parameters: ${github.server_url} and ${github.token} are automatic Workflow variables and are used to authenticate the AllSpice API
|
||||
- name: "[🔑->🕸️] Test AllSpice API with py-allspice 🔎"
|
||||
run: python .allspice/utils/py-allspice-BIST.py --allspice_hub_url ${{ github.server_url }} --allspice_token ${{ github.token }}
|
||||
|
||||
# Generate a netlist from Altium .PcbDoc file
|
||||
# Run the generate_netlist.py script from the .allspice/utils directory
|
||||
- name: Generate Netlist 🔎
|
||||
run: |
|
||||
echo -e "repo ${{ github.repository }}"
|
||||
ALLSPICE_AUTH_TOKEN=${{ github.token }} python .allspice/utils/generate_netlist.py "${{ github.repository }}" "Archimajor.PcbDoc" --allspice_hub_url "${{ github.server_url }}" --output_file Archimajor.pcbdoc.netlist.txt
|
||||
|
||||
|
||||
# Print the netlist file to the terminal
|
||||
- name: Show Netlist
|
||||
run: cat Archimajor.pcbdoc.netlist.txt
|
||||
|
||||
# Archive the netlist file as an artifact file
|
||||
- name: Archive code coverage results
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Archimajor.PcbDoc.netlist.txt
|
||||
path: Archimajor.pcbdoc.netlist.txt
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
|
||||
|
31
.allspice/workflows/04-Generate-netlist.yml
Normal file
31
.allspice/workflows/04-Generate-netlist.yml
Normal file
@ -0,0 +1,31 @@
|
||||
# Workflow triggers generate_netlist.py script to generate a netlist from an Altium project
|
||||
name: AllSpice Actions Demo
|
||||
|
||||
on:
|
||||
push:
|
||||
issues:
|
||||
types: [opened, closed, reopened]
|
||||
|
||||
|
||||
jobs:
|
||||
Generate-Netlist:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Set up Python 🐍->🖥️
|
||||
uses: actions/checkout@v3
|
||||
- name: Install requirements 🤼->🖥️
|
||||
run: pip install -r .allspice/utils/requirements.txt
|
||||
- name: Generate Netlist 🔎
|
||||
run: |
|
||||
echo -e "repo ${{ github.repository }}"
|
||||
ALLSPICE_AUTH_TOKEN=${{ github.token }} python .allspice/utils/generate_netlist.py "${{ github.repository }}" "Archimajor.PcbDoc" --allspice_hub_url "${{ github.server_url }}" --output_file Archimajor.pcbdoc.netlist.txt
|
||||
- name: Archive code coverage results
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: Archimajor.PcbDoc.netlist.txt
|
||||
path: Archimajor.pcbdoc.netlist.txt
|
||||
- run: echo "🍏 This job's status is ${{ job.status }}."
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user