.allspice | ||
images | ||
.gitignore | ||
action.yml | ||
Dockerfile | ||
entrypoint.py | ||
LICENSE.txt | ||
pyproject.toml | ||
README.md | ||
requirements-test.txt | ||
requirements.txt |
AllSpice Actions Add-on template
This Add-on shows you how to create an Add-on, and how to set up the files to make an API to pass inputs to the Add-on.
Table of Contents
Usage
Calling this add-on
This Add-on can be called from an external repository workflow file. There is an example workflow file in this repository: .allspice/workflows/add-on-workflow-example.yml
You can copy this workflow file to another repository and use it to call this Add-on template.
Define API in action.yml
The file action.yml describes how to connect your workflow call of the add-on to the actual script and specifies how parameters are used.
This is considered an API contract.
Below is the action.yml
file for this repo. You can see that the inputs
section maps inputs to input variables.
The second section composes the args from inputs and other values and passes it to the Dockerfile.
name: "Hardware DevOps Action"
description: >
A generic AllSpice Action Add-on for hardware development tasks such as schematic review,
PCB review, ECO review, and release. This action demonstrates defining parameters
for these tasks and utilizing GitHub context information.
inputs:
source_file:
description: >
Path to the source file or directory from the root of the repo. For example,
the path to a schematic or PCB file.
required: true
output_file_name:
description: "Name of the output file"
required: true
default: "output.txt"
config_file:
description: >
Path to a configuration file for the task.
required: true
task_type:
description: >
The type of hardware task to perform. Options include 'Schematic-Review',
'PCB-Review', 'ECO-Review', 'Release'.
default: "Schematic-Review"
additional_params:
description: >
Any additional parameters required for the task, provided as a JSON string.
default: "{}"
runs:
using: "docker"
image: "Dockerfile"
args:
- "--source_file"
- "${{ inputs.source_file}}"
- "--output_file"
- "${{ github.workspace}}/${{ inputs.output_file_name }}"
- "--config_file"
- ${{ inputs.config_file }}
- "--task_type"
- ${{ inputs.task_type }}
- "--additional_params"
- ${{ inputs.additional_params }}
- "--source_ref"
- ${{ allspice.sha }}
- "--server_url"
- ${{ allspice.server_url }}
- "--allspice_token"
- ${{ secrets.ALLSPICE_TOKEN }}
env:
GITHUB_TOKEN: ${{ github.token }}
Define Add-on script (entrypoint.py)
entrypoint.py
This is the program that you will use to perform your Add-on. In this case, we use Python and the py-allspice API wrapper.
The first part of the program is parsing the arguments from the API contract, and the second part runs your actual Add-on. In this template example the Python script performs a connection test to AllSpice, and displays the parameters passed from the calling Workflow file.
Define Dockerfile
Dockerfile
The Dockerfile specifies how to set up the environment and what file to run as the Add-on script.
In this repo template, we load Python 3.12, install modules from requirements.py, and thn run entrypoint.py.
FROM python:3.12-bookworm
COPY requirements.txt /requirements.txt
COPY entrypoint.py /entrypoint.py
RUN pip install -r /requirements.txt
ENTRYPOINT [ "/entrypoint.py" ]
requirements.txt
The requirements.txt file specifies which Python modules to load and which version to load.
module-name=version#
py-allspice
AllSpice’s native Python wrapper to the AllSpice API.
pyyaml
A YAML markdown language processor. Helps parse workflow.yml files.
py-allspice==3.3.0
pyyaml~=6.0
Testing files
This repo has an optional Action workflow that checks the syntax of entrypoint.py. This is helpful because Python is an interpreted language.
You do not need these files to run your Add-on, however using tests will help you spot errors.
.allspice/dependabot.yml
- Instructions for repository workflow tests..allspice/workflows/test.yml
- Workflow to test this repo on design review.- Lints 3 different versions of python (Checks syntax)
pyproject.toml
- Linter setup. Specifies how the repository workflow tests will check the syntax of this repositoryrequirements-test.txt
- the requirements for the test workflow.
Add-on input API
You can customize your Add-on inputs to match your own workflow. These are some example inputs that are helpful for running Add-ons.
You can have as many or as few inputs as you need for your workflow.
source_file
: The path to the source file used for the task. Example:Archimajor.PrjPcb
,Schematics/Beagleplay.dsn
.task_type
: The type of hardware task to perform. Options includeSchematic-Review
,PCB-Review
,ECO-Review
,Release
. (default:Schematic-Review
)source_ref
: The git reference the task should be performed for (e.g., branch name, tag name, commit SHA). (default:main
)server_url
: The URL of your AllSpice server instance.output_file
: The path to the output file. If absent, the output will be printed to the command line.additional_params
: Any additional parameters required for the task, provided as a JSON string. (default:{}
)allspice_token
: Your AllSpice application token. Generate a token at: https://hub.allspice.io/user/settings/applicationsconfig_file
: Path to the config file.input_file
: Path to the input file.
Outputs
The outputs are dependent on the task performed and will be printed to the command line or saved to the specified output_file
.
In this template repo, there are no actual outputs, however the name of the output is displayed to demnostrate the correct passing of inputs to the script.
Example Workflow
Here is the file ./allspice/workflows/add-on-workflow-example.yml
This shows how to call the Add-on in this repo.
name: Example AllSpice Add-on Template
on: [push, pull_request]
jobs:
hardware-devops:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Run Hardware DevOps Action
uses: https://hub.allspice.io/AllSpice-Demos/Add-on-template@v0.1
with:
source_path: ".allspice/examples/input.txt"
output_file_name: "output.txt"
config_file: ".allspice/examples/config.yml"
task_type: "Schematic-Review"
additional_params: '{"SCH_VER":"3"}'
env:
ALLSPICE_TOKEN: ${{ allspice.token }}