mirror of
https://staging.allspice.dev/AllSpice-Demos/Actions-demo.git
synced 2025-04-17 16:28:55 +00:00
Compare commits
109 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
17db85a2f0 | ||
|
6decdab895 | ||
|
0126d397d2 | ||
|
49aa1f5ae5 | ||
|
be993882ef | ||
|
7201dc2762 | ||
65357b285b | |||
|
ab03c255f4 | ||
4c3cbbd15b | |||
b8a9ad24ac | |||
b3dd9875db | |||
2d63d964fe | |||
5e18571de8 | |||
c6e30001c5 | |||
109f15dd3d | |||
a325abba11 | |||
|
3a2ed426cc | ||
ff639a38d4 | |||
cc8b11c1a6 | |||
4b946d5452 | |||
2cb65481c9 | |||
fa35d29be0 | |||
3d5caedd0e | |||
a7b0ac0db5 | |||
88a68f10dd | |||
9a8caddbd7 | |||
8760feba11 | |||
a134221521 | |||
47a5b99a9a | |||
9dca1dc396 | |||
a896708780 | |||
f5aa7159be | |||
1dbe8159cc | |||
5083131daa | |||
d46d9bbb5e | |||
47ebafd6c8 | |||
8174e188c2 | |||
100ccd7980 | |||
dfbebb883f | |||
7c51dfabfa | |||
93f1edfa9c | |||
e5ab266f02 | |||
789d826ab1 | |||
|
864c01880c | ||
00196122ea | |||
9f9015d2e1 | |||
c24526d9e4 | |||
50e070dff4 | |||
763626eab8 | |||
7c0d55acfb | |||
|
395521b067 | ||
f65fcec063 | |||
a53e54d251 | |||
|
25172dd086 | ||
18f5f217f8 | |||
e4f4924642 | |||
7beb6e4c8a | |||
c9023bc9c9 | |||
0b44254d5e | |||
e1f62e09a6 | |||
7353a2fe71 | |||
|
0bd293f68d | ||
|
a612634e6c | ||
|
a754bef1b8 | ||
|
de8ecc4f3d | ||
|
9215c795d6 | ||
|
c0371dd57e | ||
|
bf087abeac | ||
|
b7ef595301 | ||
|
dd276df3e3 | ||
|
df17d328fd | ||
82f3e94710 | |||
0673be95a3 | |||
c6dc417ea4 | |||
ef65996bab | |||
73542ef0f6 | |||
254f9a3769 | |||
68ea7d1c14 | |||
3da5a148ec | |||
e08106a7c4 | |||
7bb42dd820 | |||
538b7eae33 | |||
fb2c26e43e | |||
fa74d82458 | |||
a00a6058c0 | |||
31736d9904 | |||
90540110bd | |||
a6785139df | |||
93e5837ae3 | |||
926d9d6030 | |||
38ea775721 | |||
dcda80dfe6 | |||
a3448bb5b7 | |||
887a428c39 | |||
a35da0e7b3 | |||
6289021151 | |||
96f32a2c93 | |||
d7f97e1d4b | |||
|
f096f11ae9 | ||
93010bb417 | |||
|
47b36a1508 | ||
de889b6a8f | |||
|
e148bd85ae | ||
|
d2a9de2986 | ||
|
38c2347171 | ||
|
c28e88ee1f | ||
|
4e6c4c64b4 | ||
|
d76eaf7269 | ||
|
3b4f205314 |
21
.allspice/columns.yml
Normal file
21
.allspice/columns.yml
Normal file
@ -0,0 +1,21 @@
|
||||
columns:
|
||||
- name: "Manufacturer"
|
||||
part_attributes:
|
||||
- "Manufacturer"
|
||||
- "MANUFACTURER"
|
||||
sort: "asc"
|
||||
- name: "Part Number"
|
||||
part_attributes:
|
||||
- "PART"
|
||||
- "MANUFACTURER #"
|
||||
- "_part_id"
|
||||
remove_rows_matching: "TP|MTG|FID"
|
||||
- name: "Designator"
|
||||
part_attributes: "Designator"
|
||||
grouped_values_separator: ", "
|
||||
grouped_values_sort: "asc"
|
||||
- name: "Description"
|
||||
part_attributes:
|
||||
- "PART DESCRIPTION"
|
||||
- "_description"
|
||||
|
110
.allspice/utils/generate_netlist.py
Normal file
110
.allspice/utils/generate_netlist.py
Normal file
@ -0,0 +1,110 @@
|
||||
#! /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]
|
||||
try:
|
||||
# Convert to list if it's not already, and then sort
|
||||
if not isinstance(pins_on_net, list):
|
||||
pins_on_net = list(pins_on_net)
|
||||
pins_on_net.sort()
|
||||
except Exception as e:
|
||||
print(f"Error sorting pins on net {net}: {e}", file=sys.stderr)
|
||||
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~=3.0
|
||||
rich~=13.0
|
14
.allspice/workflows/00-Workflow-syntax-minimal.yml
Normal file
14
.allspice/workflows/00-Workflow-syntax-minimal.yml
Normal file
@ -0,0 +1,14 @@
|
||||
name: Workflow-syntax-minimal
|
||||
|
||||
on:
|
||||
push:
|
||||
issues:
|
||||
# Trigger on issue open, close, or reopen
|
||||
types: [opened, closed, reopened]
|
||||
|
||||
jobs:
|
||||
Job-Hello-World:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: "Print Hello World 🔎"
|
||||
run: echo "Hello World"
|
57
.allspice/workflows/01-Workflow-syntax-commented.yml
Normal file
57
.allspice/workflows/01-Workflow-syntax-commented.yml
Normal file
@ -0,0 +1,57 @@
|
||||
|
||||
# This is a basic workflow to help you get started with Actions
|
||||
# Lines beginning with a `#` are comments, and only intended to help reviewers understand the script
|
||||
# Actions documentation: https://learn.allspice.io/docs/actions-cicd
|
||||
# This file is written in YAML syntax, to learn more about YAML visit https://learn.allspice.io/docs/yaml
|
||||
|
||||
# Workflow name
|
||||
name: Workflow-syntax-commented
|
||||
|
||||
# Workflow triggers on
|
||||
# To learn more about triggers, visit https://learn.allspice.io/docs/actions-triggers
|
||||
on:
|
||||
# Workflow is triggered if any of the following events occur
|
||||
# i.e. Logical OR of triggers, i.e. trigger on push or issues
|
||||
|
||||
# Trigger on push
|
||||
push:
|
||||
|
||||
# Trigger on issues
|
||||
issues:
|
||||
# Trigger on issue open, close, or reopen
|
||||
types: [opened, closed, reopened]
|
||||
|
||||
|
||||
# Workflow jobs
|
||||
# Jobs run in parallel by default
|
||||
# To run jobs in sequence, create multiple steps in a job
|
||||
jobs:
|
||||
|
||||
# Job name
|
||||
Job-Hello-World:
|
||||
|
||||
# Set up server container using Ubuntu operating system (Debian based Linux distribution)
|
||||
# To learn more about Ubuntu, visit https://ubuntu.com/
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
# Job steps
|
||||
# Steps run in sequence on the runner machine
|
||||
# To make steps run in parallel, create multiple jobs
|
||||
steps:
|
||||
|
||||
# Job steps start with - name: "Step name"
|
||||
- name: "Print Hello World 🔎"
|
||||
|
||||
# run keyword specifies the shell command to run
|
||||
# The shell command is a simple echo command to print "Hello World"
|
||||
# The command is run in the runner machine
|
||||
# To learn more about shell commands, visit https://www.shellscript.sh/
|
||||
run: echo "Hello World"
|
||||
|
||||
- name: "Multiline shell command 🔎"
|
||||
|
||||
# The shell command is a simple echo command to print two lines of text
|
||||
# The | pipe character is used to specify a multiline command
|
||||
run: |
|
||||
echo "This is the first line"
|
||||
echo "This is the second line"
|
47
.allspice/workflows/02-Running-common-Actions.yml
Normal file
47
.allspice/workflows/02-Running-common-Actions.yml
Normal file
@ -0,0 +1,47 @@
|
||||
# AllSpice Running common Actions workflow
|
||||
# Action triggers on push and issues
|
||||
# Action runs "generate-bom-altium" action
|
||||
# .allspice/workflows/generate_bom.yml
|
||||
name: Generate BOM
|
||||
on:
|
||||
push:
|
||||
issues:
|
||||
types: [opened, closed, reopened]
|
||||
|
||||
jobs:
|
||||
Generate_BOM:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Checkout is only needed if columns.json is committed in your Altium project repo.
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
|
||||
- name: Generate BOM
|
||||
uses: https://hub.allspice.io/Actions/generate-bom@v0.5
|
||||
with:
|
||||
# The path to the project file in your repo (.PrjPcb for Altium, .DSN for OrCad).
|
||||
source_path: Archimajor.PrjPcb
|
||||
# [optional] A path to a YAML file mapping columns to the component attributes
|
||||
# This file must be provided.
|
||||
# Default: 'columns.json'
|
||||
columns: .allspice/columns.yml
|
||||
# [optional] The path to the output file that will be generated.
|
||||
# Default: 'bom.csv'
|
||||
output_file_name: bom.csv
|
||||
# [optional] A comma-separated list of columns to group the BOM by. If empty
|
||||
# or not present, the BOM will be flat.
|
||||
# Default: ''
|
||||
group_by: 'Part Number'
|
||||
# [optional] The variant of the project to generate the BOM for. If empty
|
||||
# or not present, the BOM will be generated for the default variant.
|
||||
# Default: ''
|
||||
variant: ''
|
||||
# Print bom.csv to terminal
|
||||
- name: Show BOM
|
||||
run: cat bom.csv
|
||||
|
||||
- name: Upload file as artifact
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: BOM.csv
|
||||
path: bom.csv
|
54
.allspice/workflows/03-Python-py-allspice.yml
Normal file
54
.allspice/workflows/03-Python-py-allspice.yml
Normal file
@ -0,0 +1,54 @@
|
||||
|
||||
# Python-py-allspice demo repository
|
||||
# This workflow 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 ${{ allspice.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/utils directory
|
||||
- name: "[🏃->🐍] Run .allspice/utils/hello-world.py 🔎"
|
||||
run: python .allspice/utils/hello-world.py
|
||||
|
||||
# Run the py-allspice self-test script, this will ping the server and verify the API is working
|
||||
# Parameters: ${allspice.server_url} and ${allspice.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 ${{ allspice.server_url }} --allspice_token ${{ allspice.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 ${{ allspice.repository }}"
|
||||
ALLSPICE_AUTH_TOKEN=${{ allspice.token }} python .allspice/utils/generate_netlist.py "${{ allspice.repository }}" "Archimajor.PcbDoc" --allspice_hub_url "${{ allspice.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
|
||||
|
36
.allspice/workflows/04-Secrets-variables-keys.yml
Normal file
36
.allspice/workflows/04-Secrets-variables-keys.yml
Normal file
@ -0,0 +1,36 @@
|
||||
# Secrets, Variables, and Keys demo
|
||||
# This workflow demonstrates how to use secrets, variables, and keys in the workflow
|
||||
# AllSpice Actions documentation: https://learn.allspice.io/docs/actions-cicd
|
||||
name: Secrets-Variables-Keys-Demo
|
||||
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
|
||||
|
||||
# Print repository action variable VARIABLE_NAME and value
|
||||
- name: Print repository Action variable 🔎
|
||||
run: |
|
||||
echo "Repository variable VARIABLE_NAME = ${{ vars.VARIABLE_NAME }}"
|
||||
echo "Repository variables are stored in ${{ allspice.server_url }}/${{ allspice.repository }}/settings/actions/variables"
|
||||
|
||||
- name: Use Secret 🔎
|
||||
# Store the secret in an environment variable YOUR_SECRET
|
||||
env:
|
||||
ENV_SECRET: ${{ secrets.YOUR_SECRET }}
|
||||
|
||||
# Demonstrate how to use secrets in the workflow
|
||||
run: |
|
||||
echo "Secrets are stored in ${{ allspice.server_url }}/${{ allspice.repository }}"/settings/actions/secrets
|
||||
echo "Secrets are only available to the repository admins and the workflow"
|
||||
echo "Store API Tokens in secrets and use them in the workflow without exposing them"
|
||||
echo "Secrets are not printed to the terminal for security reasons and will be replaced with ***"
|
||||
echo "Using secret from /settings/actions/secrets YOUR_SECRET=${{ secrets.YOUR_SECRET }}"
|
||||
echo "Using secret from stored envrironmental variable ENV_SECRET=$YOUR_SECRET"
|
BIN
images/enable_actions.png
Normal file
BIN
images/enable_actions.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 43 KiB |
BIN
images/workflow-demo.png
Normal file
BIN
images/workflow-demo.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 271 KiB |
BIN
images/workflow-list.png
Normal file
BIN
images/workflow-list.png
Normal file
Binary file not shown.
After ![]() (image error) Size: 231 KiB |
138
readme.md
138
readme.md
@ -1,42 +1,114 @@
|
||||
# Archimajor
|
||||
## Actions demo repo
|
||||
Welcome to the Actions demo repo.
|
||||
|
||||
<img align="left" width="300" height="200" src="./.allspice/PCB.PNG">
|
||||
This repo will help you get started quickly with actions.
|
||||
|
||||
## Summary
|
||||
This repo is part of the [Actions quickstart guide](https://learn.allspice.io/docs/allspice-ci-cd-actions-quickstart)
|
||||
|
||||
3D printer motherboard, designed by [Ultimachine](https://ultimachine.com/). Features include:
|
||||
### Quickstart overview
|
||||
|
||||
- **5x integrated 256 microstep motor drivers**
|
||||
- **6x PWM Mosfet outputs**
|
||||
- **4x thermistor inputs**
|
||||
- **SPI (Serial Peripheral Interface)**
|
||||
- ** Removed infinite loop on self-calibration.
|
||||
- [ ] Sign up for Actions by talking to one of our [friendly engineers](https://allspice.io/demo)
|
||||
- [ ] Create a new repo using this repo as a template, or migrate this repo
|
||||
- [ ] Enable actions by visiting your repository->:wrench:Settings, and clicking [X] `Enable Repository Actions`
|
||||
|
||||
---
|
||||
- <img height="150" src="./images/enable_actions.png">
|
||||
|
||||
## Specifications
|
||||
|
||||
### General Specifications
|
||||
|
||||
**Input Power Supply**: 12V - 24V DC, 16A+
|
||||
|
||||
**Operating Temperature Range (est.)**: 0dC ~ 70dC
|
||||
|
||||
## Firmware
|
||||
|
||||
[Source](https://github.com/ultimachine/Marlin4due/tree/Archim2)
|
||||
|
||||
[Binary](https://github.com/MarlinFirmware/Marlin/archive/bugfix-2.0.x.zip)
|
||||
|
||||
## Bill of Materials
|
||||
|
||||
[Archimajor.csv](./Archimajor.csv)
|
||||
|
||||
## Note
|
||||
|
||||
Changed heat bed fuse holder to yellow to differentiate channels.
|
||||
- [ ] Trigger Actions workflows by pushing files to the repo, or by creating/opening/closing an issue
|
||||
- [ ] Visit the Actions tab to view the workflows
|
||||
- Click on the workflow you would like to view
|
||||
- <img height="400" src="./images/workflow-list.png">
|
||||
- Click on individual jobs to see their output
|
||||
- <img height="400" src="./images/workflow-demo.png">
|
||||
|
||||
|
||||
## Disclaimer
|
||||
## Actions background
|
||||
|
||||
*NOTE: This does not represent actual data from the Rambo/Archimajor PCBA
|
||||
This section introduces some high-level concepts and definitions of Actions. To learn more, visit the main [Actions documentation](https://learn.allspice.io/docs/actions-cicd)
|
||||
|
||||
### Continuous Integration (CI)
|
||||
|
||||
CI is part of development operations (DevOps).
|
||||
|
||||
CI is the practice of **automating** the integration of **design changes** from multiple contributors into a single project.
|
||||
|
||||
### Actions
|
||||
|
||||
An action is the basic reusable block of CI. It's just a program or series of programs that you call from your workflow `.allspice/workflows/your_workflow.yml`
|
||||
|
||||
Actions allow you to `automate repetitive and error-prone processes` to let the engineers focus on the creative design challenges.
|
||||
|
||||
Actions is just an easy way to say automation program.
|
||||
|
||||
### Actions trigger automatically
|
||||
|
||||
Automation programs are `triggered` by standard actions like `uploading files to version control`, starting or `finishing a design review`.
|
||||
|
||||
Triggers are defined in your workflow files `.allspice/workflows/your_workflow.yml`
|
||||
|
||||
Engineering teams gain rapid improvements on their process by relying on Actions to automate instead of manual operations.
|
||||
|
||||
To learn more, visit https://learn.allspice.io/docs/actions-triggers
|
||||
|
||||
## **Actions help your design team**
|
||||
|
||||
- Process BOM/Assembly
|
||||
- Availability checks
|
||||
- Lifecycle checks (PLM)
|
||||
- COGS (ERP)
|
||||
- CM BOM Diff Report
|
||||
- Extended quote/forecasting
|
||||
- PCB cost/schedule options
|
||||
- Quotes with multiple quantities
|
||||
- Date extended quantity is available
|
||||
- Process Schematics
|
||||
- Verify symbols
|
||||
- Reference designators
|
||||
- Symbol attributes
|
||||
- MFG/MPN/Value/etc
|
||||
- Netlist
|
||||
- Static analysis
|
||||
- Power/GND misconnects
|
||||
- Voltage level checks between components
|
||||
- Process PCBAs
|
||||
- Verify footprints
|
||||
- Verify design rules match (DRC is no good if the rules are wrong)
|
||||
- Create trace report (Current/Power/Width)
|
||||
- Generate stack-up documentation
|
||||
- Generate documentation (Sch/PCB Design Review/Release notes/Fab files)
|
||||
- Regulate releases
|
||||
- File pattern match
|
||||
- Flag missing files
|
||||
- Generate report
|
||||
- Connect to any public API
|
||||
- PLM/ERP (Cofactr/PTC)
|
||||
- Distributors (Digikey/Mouser/Newark/Octopart)
|
||||
- Task management (Jira)
|
||||
- Create Read Update Delete (CRUD) cloud “office” documents
|
||||
- MS365 (Excel/Word/Powerpoint)
|
||||
- Google docs (Sheets/Docs/Slides)
|
||||
- Network sync (Dropbox/MS365/iCloud)
|
||||
|
||||
Actions can seem a bit abstract, but it's really just code running on a computer
|
||||
|
||||
## Workflows
|
||||
|
||||
Workflows are the scaffolding of your automation. They are the code that loads the automation code. Workflows are easy to read and write `yaml` files that define the following:
|
||||
|
||||
- Load software container
|
||||
- Ubuntu LTS 2024 (Debian flavored Linux distro)
|
||||
- Load dependencies
|
||||
- Software libraries
|
||||
- Design Files
|
||||
- API tools
|
||||
- Secrets/tokens/keys
|
||||
- Run programs
|
||||
- Actions - Pre-built no-code automation programs
|
||||
- Python - Programs can be written in python and access our AllSpice.io API via our py-allspice python module.
|
||||
- C/C++, use the same language as firmware development
|
||||
- Any programming language that can run on Debian/Ubuntu Linux
|
||||
- Extend existing automation
|
||||
- Workflows can be broken into modules that can be reused and extended.
|
||||
|
||||
|
||||
## Learn more
|
||||
To learn more, visit our [actions documentation](https://learn.allspice.io/docs/actions-cicd).
|
Loading…
Reference in New Issue
Block a user