Generate PCB images and production files via Actions #4
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
push: | |
branches: | |
- main | |
paths-ignore: | |
- '**/README.md' | |
- '**/LICENSE' | |
- '**/CHANGES.txt' | |
- '**/img/*' | |
pull_request: | |
branches: | |
- main | |
paths-ignore: | |
- '**/README.md' | |
- '**/LICENSE' | |
- '**/CHANGES.txt' | |
- '**/img/*' | |
workflow_dispatch: | |
paths-ignore: | |
- '**/README.md' | |
- '**/LICENSE' | |
- '**/CHANGES.txt' | |
- '**/img/*' | |
env: | |
DOCKER_USER_OPTION: '$UID:$GID' | |
name: Build | |
jobs: | |
generate: | |
runs-on: ubuntu-latest | |
name: Generate | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3.5.2 | |
- uses: xanantis/docker-file-ownership-fix@v1 | |
- name: Run build script | |
run: | | |
chmod +x build.sh | |
./build.sh | |
shell: bash | |
- name: Persist PCB gerbers | |
uses: actions/upload-artifact@v3.1.2 | |
with: | |
name: One_pcb_gerbers | |
path: gerbers/pcb | |
- name: Persist case gerbers | |
uses: actions/upload-artifact@v3.1.2 | |
with: | |
name: One_case_gerbers | |
path: gerbers/case | |
- name: Persist images | |
uses: actions/upload-artifact@v3.1.2 | |
with: | |
name: One_images | |
path: images | |
image_matrix: | |
runs-on: ubuntu-latest | |
name: PCB image matrix | |
needs: generate | |
outputs: | |
matrix: ${{ steps.setmatrix.outputs.matrix }} | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: One_images | |
path: images | |
- id: setmatrix | |
run: | | |
matrixArray=$(find ./images -name 'pcb*.png' | xargs -n 1 -i echo {} {} | sed 's# .*/# #') # Creates array of all PCB image files | |
# Start Generate JSON String | |
echo "$matrixArray" | \ | |
jq --slurp --raw-input 'split("\n")[:-1] | map(split(" "))' | \ | |
jq "map({\"filepath\": (.[0]), \"basename\": .[1] })" | \ | |
jq -sc "{ \"include\": .[] }" > tmp | |
cat ./tmp | |
# End Generate JSON String | |
matrixStringifiedObject=$(cat ./tmp) # Use this as jq @sh wasn't cooperating | |
echo "matrix=$matrixStringifiedObject" >> $GITHUB_OUTPUT | |
gerber_matrix: | |
runs-on: ubuntu-latest | |
name: Gerber matrix | |
needs: generate | |
outputs: | |
matrix: ${{ steps.setmatrix.outputs.matrix }} | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: One_pcb_gerbers | |
path: gerbers/pcb | |
- id: setmatrix | |
run: | | |
matrixArray=$(find ./gerbers/pcb -name '*.zip' | xargs -n 1 -i echo {} {} | sed 's# .*/# #') # Creates array of all PCB gerber files | |
# Start Generate JSON String | |
echo "$matrixArray" | \ | |
jq --slurp --raw-input 'split("\n")[:-1] | map(split(" "))' | \ | |
jq "map({\"filepath\": (.[0]), \"basename\": .[1] })" | \ | |
jq -sc "{ \"include\": .[] }" > tmp | |
cat ./tmp | |
# End Generate JSON String | |
matrixStringifiedObject=$(cat ./tmp) # Use this as jq @sh wasn't cooperating | |
echo "matrix=$matrixStringifiedObject" >> $GITHUB_OUTPUT | |
upload_pcb_gerbers: | |
runs-on: ubuntu-latest | |
name: Upload PCB gerbers | |
needs: [generate, gerber_matrix] | |
strategy: | |
matrix: ${{fromJson(needs.gerber_matrix.outputs.matrix)}} | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: One_pcb_gerbers | |
path: gerbers/pcb | |
- name: Gets latest created release info | |
id: latest_release_info | |
uses: jossef/action-latest-release-info@v1.2.1 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Upload gerbers | |
uses: shogo82148/actions-upload-release-asset@v1.6.4 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
overwrite: true | |
upload_url: ${{ steps.latest_release_info.outputs.upload_url }} | |
asset_path: ${{ matrix.filepath }} | |
asset_name: ${{ matrix.basename }} | |
upload_images: | |
runs-on: ubuntu-latest | |
name: Upload images | |
needs: [generate, image_matrix] | |
strategy: | |
matrix: ${{fromJson(needs.image_matrix.outputs.matrix)}} | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: One_images | |
path: images | |
- name: Gets latest created release info | |
id: latest_release_info | |
uses: jossef/action-latest-release-info@v1.2.1 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Upload images | |
uses: shogo82148/actions-upload-release-asset@v1.6.4 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
overwrite: true | |
upload_url: ${{ steps.latest_release_info.outputs.upload_url }} | |
asset_path: ${{ matrix.filepath }} | |
asset_name: ${{ matrix.basename }} | |
upload_gerber_case_files: | |
runs-on: ubuntu-latest | |
name: Upload case gerber files | |
needs: generate | |
steps: | |
- uses: actions/download-artifact@master | |
with: | |
name: One_case_gerbers | |
path: gerbers/case | |
- name: Gets latest created release info | |
id: latest_release_info | |
uses: jossef/action-latest-release-info@v1.2.1 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
- name: Upload case files | |
uses: shogo82148/actions-upload-release-asset@v1.6.4 | |
env: | |
GITHUB_TOKEN: ${{ github.token }} | |
with: | |
overwrite: true | |
upload_url: ${{ steps.latest_release_info.outputs.upload_url }} | |
asset_path: ./gerbers/case/gerber_case_files.zip | |
asset_name: gerber_case_files.zip |