Merge pull request #1 from faramire/docu-fix #3
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
name: gds | |
# either manually started, or on a schedule | |
on: [ push, workflow_dispatch ] | |
permissions: | |
contents: write | |
pages: write | |
id-token: write | |
jobs: | |
gds: | |
env: | |
OPENLANE_IMAGE_NAME: efabless/openlane:2022.07.02_01.38.08 | |
OPENLANE_ROOT: /home/runner/openlane | |
PDK_ROOT: /home/runner/pdk | |
PDK: sky130B | |
# ubuntu | |
runs-on: ubuntu-latest | |
steps: | |
# need the repo checked out | |
- name: checkout repo | |
uses: actions/checkout@v3 | |
# build PDK and fetch OpenLane | |
- name: pdk & caravel | |
run: | | |
cd $HOME | |
git clone https://github.com/efabless/caravel_user_project.git -b mpw-7a | |
cd caravel_user_project | |
make setup | |
# need python | |
- name: setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- run: pip install requests PyYAML | |
# fetch the Verilog from Wokwi API | |
- name: fetch Verilog and build config | |
run: ./configure.py --create-user-config | |
# run OpenLane to build the GDS | |
- name: make GDS | |
run: > | |
docker run --rm | |
-v $OPENLANE_ROOT:/openlane | |
-v $PDK_ROOT:$PDK_ROOT | |
-v $(pwd):/work | |
-e PDK_ROOT=$PDK_ROOT | |
-u $(id -u $USER):$(id -g $USER) | |
$OPENLANE_IMAGE_NAME | |
/bin/bash -c "./flow.tcl -verbose 2 -overwrite -design /work/src -run_path /work/runs -tag wokwi" | |
# for debugging, show all the files | |
- name: show files | |
run: find runs/wokwi/ | |
# print some routing stats | |
- name: add summary | |
run: ./configure.py --get-stats >> $GITHUB_STEP_SUMMARY | |
# print some cell stats | |
- name: cell usage summary | |
run: | | |
git clone https://github.com/TinyTapeout/sssummarizer | |
sssummarizer/sssummarizer.py --gl runs/wokwi/results/final/verilog/gl/*.v --print-category >> $GITHUB_STEP_SUMMARY | |
- name: populate src cache | |
uses: actions/cache@v3 | |
with: | |
path: src | |
key: ${{ runner.os }}-src-${{ github.run_id }} | |
- name: populate runs cache | |
uses: actions/cache@v3 | |
with: | |
path: runs | |
key: ${{ runner.os }}-runs-${{ github.run_id }} | |
svg: | |
needs: gds | |
runs-on: ubuntu-latest | |
steps: | |
- name: checkout repo | |
uses: actions/checkout@v3 | |
- name: setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: restore runs cache | |
uses: actions/cache@v3 | |
with: | |
path: runs | |
key: ${{ runner.os }}-runs-${{ github.run_id }} | |
- name: create svg | |
run: | | |
python -m pip install gdstk | |
python << EOF | |
import gdstk | |
import pathlib | |
gds = sorted(pathlib.Path('runs').glob('wokwi/results/final/gds/*.gds')) | |
library = gdstk.read_gds(gds[-1]) | |
top_cells = library.top_level() | |
top_cells[0].write_svg('gds_render.svg') | |
EOF | |
- name: populate svg cache | |
uses: actions/cache@v3 | |
with: | |
path: 'gds_render.svg' | |
key: ${{ runner.os }}-svg-${{ github.run_id }} | |
viewer: | |
needs: gds | |
runs-on: ubuntu-latest | |
steps: | |
- name: checkout GDS2glTF repo | |
uses: actions/checkout@v3 | |
with: | |
repository: mbalestrini/GDS2glTF | |
- name: setup python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: '3.10' | |
- name: restore runs cache | |
uses: actions/cache@v3 | |
with: | |
path: runs | |
key: ${{ runner.os }}-runs-${{ github.run_id }} | |
- name: gds2gltf | |
run: | | |
python -m pip install numpy gdspy triangle pygltflib | |
cp runs/wokwi/results/final/gds/*.gds tinytapeout.gds | |
python3 gds2gltf.py tinytapeout.gds | |
- name: populate viewer cache | |
uses: actions/cache@v3 | |
with: | |
path: 'tinytapeout.gds.gltf' | |
key: ${{ runner.os }}-viewer-${{ github.run_id }} | |
artifact: | |
needs: | |
- gds | |
runs-on: ubuntu-latest | |
steps: | |
- name: restore src cache | |
uses: actions/cache@v3 | |
with: | |
path: src | |
key: ${{ runner.os }}-src-${{ github.run_id }} | |
- name: restore runs cache | |
uses: actions/cache@v3 | |
with: | |
path: runs | |
key: ${{ runner.os }}-runs-${{ github.run_id }} | |
- name: upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
# path depends on the tag and the module name | |
name: GDS | |
path: | | |
src/* | |
runs/wokwi/results/final/* | |
runs/wokwi/reports/metrics.csv | |
runs/wokwi/reports/synthesis/1-synthesis.AREA 0.stat.rpt | |
pages: | |
needs: | |
- svg | |
- viewer | |
environment: | |
name: github-pages | |
url: ${{ steps.deployment.outputs.page_url }} | |
outputs: | |
page_url: ${{ steps.deployment.outputs.page_url }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: restore svg cache | |
uses: actions/cache@v3 | |
with: | |
path: 'gds_render.svg' | |
key: ${{ runner.os }}-svg-${{ github.run_id }} | |
- name: restore viewer cache | |
uses: actions/cache@v3 | |
with: | |
path: 'tinytapeout.gds.gltf' | |
key: ${{ runner.os }}-viewer-${{ github.run_id }} | |
- name: generate redirect to viewer | |
run: | | |
cat << EOF >> index.html | |
<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<title>Redirecting to GDS Viewer...</title> | |
</head> | |
<body> | |
<script> | |
location.href = "https://gds-viewer.tinytapeout.com/?model=" + encodeURIComponent(location.href + '/tinytapeout.gds.gltf'); | |
</script> | |
</body> | |
</html> | |
EOF | |
- name: Setup Pages | |
uses: actions/configure-pages@v2 | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v1 | |
with: | |
path: '.' | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/[email protected] | |
preview: | |
needs: pages | |
runs-on: ubuntu-latest | |
steps: | |
- name: add gds preview | |
run: | | |
PAGE_URL=${{ needs.pages.outputs.page_url }} | |
PAGE_URL=$(echo "$PAGE_URL" | sed -e 's/\/$//') | |
cat << EOF >> $GITHUB_STEP_SUMMARY | |
# layout | |
![svg]($PAGE_URL/gds_render.svg) | |
# viewer | |
[open preview](https://gds-viewer.tinytapeout.com/?model=$PAGE_URL/tinytapeout.gds.gltf) | |
EOF |