Template to make your own custom Add-ons
Go to file
Daniel Lindmark f4407fd3fa
Example AllSpice Add-on Template / hardware-devops (push) Successful in 5s Details
Lint and test / Test (3.10) (push) Successful in 10s Details
Lint and test / Test (3.11) (push) Successful in 9s Details
Lint and test / Test (3.12) (push) Successful in 9s Details
Update diagram
2024-07-21 22:03:41 -05:00
.allspice Change Add-on name to explicit URL@V 2024-07-21 20:10:07 -05:00
images Update diagram 2024-07-21 22:03:41 -05:00
.gitignore Add linting and CI checks 2024-05-16 15:13:54 -07:00
Add-on-script.py Fix linting issues 2024-07-21 20:16:28 -05:00
Dockerfile Create generic template 2024-07-21 18:03:17 -05:00
LICENSE.txt Add license (#1) 2024-05-15 18:22:51 -04:00
README.md Add diagram 2024-07-21 21:14:23 -05:00
action.yml Fix action.yml to match Add-on-script.py 2024-07-21 19:25:09 -05:00
pyproject.toml Add linting and CI checks 2024-05-16 15:13:54 -07:00
requirements-test.txt Bump ruff from 0.4.4 to 0.4.7 (#9) 2024-06-03 11:57:29 -04:00
requirements.txt Bump py-allspice version for multi-part components 2024-07-01 12:03:04 -04:00

README.md

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

Diagram of Add-on files and how they link together. A visual representaiton of this page

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

Add-on-script.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 Add-on-script.py.

FROM python:3.12-bookworm

COPY requirements.txt /requirements.txt
COPY Add-on-script.py /Add-on-script.py

RUN pip install -r /requirements.txt

ENTRYPOINT [ "/Add-on-script.py" ]

requirements.txt

The requirements.txt file specifies which Python modules to load and which version to load.

module-name=version#

py-allspice AllSpices 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 Add-on-script.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 repository
  • requirements-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 include Schematic-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/applications
  • config_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 }}