Ml for synthesis prototype - Refactoring #214
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
name: NITTA Build and Test | |
on: | |
pull_request: | |
push: | |
branches: master | |
env: | |
GH_PAGES_DIR: gh-pages | |
jobs: | |
notify-about-push: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Send msg on push | |
uses: appleboy/telegram-action@master | |
with: | |
to: ${{ secrets.TELEGRAM_TO }} | |
token: ${{ secrets.TELEGRAM_TOKEN }} | |
format: html | |
args: | | |
Repository: <strong>${{ github.event.repository.full_name }}</strong> | |
Ref: <strong>${{ github.ref }}</strong> | |
Event: <strong>${{ github.event_name }}</strong> | |
Info: ${{ github.event.pull_request.title }} | |
${{ github.event.pull_request.html_url }} | |
nitta-haskell-deps: | |
runs-on: ubuntu-latest | |
timeout-minutes: 60 | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/cache@v3 | |
name: Cache ~/.stack | |
id: cache | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-stack-global-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-stack-global- | |
lookup-only: true | |
- name: Install haskell-stack | |
if: steps.cache.outputs.cache-hit != 'true' | |
uses: haskell-actions/setup@v2 | |
with: | |
enable-stack: true | |
stack-version: "latest" | |
stack-no-global: true | |
- name: Install nitta and dev dependencies | |
if: steps.cache.outputs.cache-hit != 'true' | |
run: | | |
stack build --haddock --test --only-dependencies | |
stack install doctest weeder | |
nitta: | |
runs-on: ubuntu-latest | |
needs: nitta-haskell-deps | |
timeout-minutes: 45 | |
steps: | |
- uses: actions/checkout@v3 | |
############################################################ | |
## Caches | |
- uses: actions/cache@v3 | |
name: Cache ~/.stack | |
with: | |
path: ~/.stack | |
key: ${{ runner.os }}-stack-global-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-stack-global- | |
- uses: actions/cache@v3 | |
name: Cache nitta exe | |
with: | |
path: ~/.local/bin | |
key: ${{ runner.os }}-nitta-exe-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-exe- | |
- uses: actions/cache@v3 | |
name: Cache nitta-api-gen | |
with: | |
path: ./web/src/services/gen | |
key: ${{ runner.os }}-nitta-api-gen-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-api-gen- | |
############################################################ | |
## Setup dev tools | |
- name: Install haskell-stack | |
uses: haskell-actions/setup@v2 | |
with: | |
enable-stack: true | |
stack-version: "latest" | |
stack-no-global: true | |
- name: "Set up HLint" | |
uses: haskell-actions/hlint-setup@v2.4.8 | |
with: | |
version: "3.6.1" | |
- name: Install Icarus Verilog | |
run: sudo apt-get install iverilog | |
############################################################ | |
## nitta checks | |
- name: Build & test nitta | |
run: make build test | |
- name: Check nitta lint and format | |
run: make lint | |
- name: Make production build | |
run: make build-prod | |
- name: Generate backend API | |
run: stack exec nitta-api-gen -- -v | |
############################################################ | |
## nitta publish docs & reports | |
- name: Copy doc to GH_PAGES_DIR | |
run: | | |
mkdir -p "${{ env.GH_PAGES_DIR }}/haddock/" | |
cp -r $(stack path --dist-dir)/doc/html/nitta "$_" | |
- name: Copy test coverage to GH_PAGES_DIR | |
run: cp -r $(stack path --local-hpc-root)/combined/all ${{ env.GH_PAGES_DIR }}/hpc | |
- name: Copy API doc to GH_PAGES_DIR | |
run: | | |
mkdir -p "${{ env.GH_PAGES_DIR }}/rest-api/" | |
cp ./web/src/services/gen/rest_api.markdown "$_" | |
- name: Copy README.md to GH_PAGES_DIR | |
run: cp README.md ${{ env.GH_PAGES_DIR }}/ | |
- name: Publish generated content to GitHub Pages | |
if: ${{ github.ref == 'refs/heads/master'}} | |
uses: JamesIves/github-pages-deploy-action@v4.4.1 | |
with: | |
folder: ${{ env.GH_PAGES_DIR }} | |
branch: gh-pages | |
nitta-frontend: | |
runs-on: ubuntu-latest | |
needs: nitta | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v3 | |
############################################################ | |
## Caches | |
- name: Get yarn cache directory path | |
working-directory: ./web | |
id: yarn-cache-dir-path | |
run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | |
- uses: actions/cache@v3 | |
id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`) | |
with: | |
path: ${{ steps.yarn-cache-dir-path.outputs.dir }} | |
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | |
restore-keys: | | |
${{ runner.os }}-yarn- | |
- uses: actions/cache@v3 | |
name: Cache nitta exe | |
with: | |
path: ~/.local/bin | |
key: ${{ runner.os }}-nitta-exe-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-exe- | |
- uses: actions/cache@v3 | |
name: Cache nitta-api-gen | |
with: | |
path: ./web/src/services/gen | |
key: ${{ runner.os }}-nitta-api-gen-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-api-gen- | |
############################################################ | |
## nitta ui checks | |
- name: Build nitta frontend | |
timeout-minutes: 15 | |
run: | | |
yarn --cwd web install | |
make ui-build | |
nitta-ml: | |
runs-on: ubuntu-latest | |
needs: nitta | |
timeout-minutes: 15 | |
steps: | |
- uses: actions/checkout@v3 | |
############################################################ | |
## Caches | |
- uses: actions/cache@v3 | |
name: Cache nitta exe | |
with: | |
path: ~/.local/bin | |
key: ${{ runner.os }}-nitta-exe-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-exe- | |
- uses: actions/cache@v3 | |
name: Cache nitta-api-gen | |
with: | |
path: ./web/src/services/gen | |
key: ${{ runner.os }}-nitta-api-gen-${{ hashFiles('stack.yaml') }}-${{ hashFiles('package.yaml') }}-${{ hashFiles('**/*.hs') }} | |
restore-keys: | | |
${{ runner.os }}-nitta-api-gen- | |
############################################################ | |
## Setup dev tools | |
- uses: abatilo/actions-poetry@v2 | |
with: | |
poetry-version: 1.6.1 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
cache: poetry | |
- name: Install Python dependencies | |
working-directory: ./ml/synthesis | |
run: poetry install --no-root | |
############################################################ | |
## nitta ml checks | |
- name: Run Python tests | |
working-directory: ./ml/synthesis | |
env: | |
NITTA_RUN_COMMAND_OVERRIDE: nitta | |
run: | | |
export PYTHONPATH=$(pwd)/src:$PYTHONPATH | |
poetry run pytest | |
verilog-formatting: | |
timeout-minutes: 5 | |
runs-on: ubuntu-latest | |
container: ryukzak/alpine-iverilog | |
defaults: | |
run: | |
shell: sh | |
steps: | |
- uses: actions/checkout@v3 | |
- run: | | |
make -C hdl > make_hdl.log | |
cat make_hdl.log | |
test "$(grep -ci error make_hdl.log)" -eq 0 | |
haskell-formatting: | |
timeout-minutes: 5 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: haskell-actions/run-fourmolu@v9 | |
with: | |
version: "0.14.1.0" | |
typescript-formatting: | |
timeout-minutes: 5 | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Check ts and tsx code style by prettier | |
working-directory: ./web | |
run: | | |
yarn add -s prettier | |
yarn exec -s prettier -- --check src/**/*.{ts,tsx} | |
markdown-formatting: | |
timeout-minutes: 5 | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: Check out repository code | |
uses: actions/checkout@v3.2.0 | |
- name: Run mdl for check markdown format | |
uses: nosborn/github-action-markdown-cli@v3.3.0 | |
with: | |
files: . | |
config_file: .markdownlint.yaml | |
python-checks: | |
timeout-minutes: 5 | |
runs-on: ubuntu-22.04 | |
name: python-${{ matrix.tool }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- tool: black | |
run_cmd: black --check --diff src | |
- tool: ruff | |
run_cmd: ruff check --diff src | |
- tool: mypy | |
# for mypy we need to install all deps for type hints, type stubs and mypy plugins | |
setup_cmd: | | |
poetry install --no-root | |
- tool: vulture | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: 3.11 | |
- uses: abatilo/actions-poetry@v2 | |
with: | |
poetry-version: 1.6.1 | |
- name: Install ${{ matrix.tool }} with a version from poetry.lock | |
working-directory: ./ml/synthesis | |
# use system python, we're in an action container | |
run: | | |
poetry config virtualenvs.create false | |
poetry export --only=dev --without-hashes \ | |
| grep ${{ matrix.tool }} \ | |
| pip install -r /dev/stdin | |
- name: Run a ${{ matrix.tool }}-specific setup command | |
if: ${{ matrix.setup_cmd }} | |
working-directory: ./ml/synthesis | |
run: ${{ matrix.setup_cmd }} | |
- name: Check Python code with ${{ matrix.tool }} | |
working-directory: ./ml/synthesis | |
# run provided run_cmd or just call tool by name with no arguments | |
run: | | |
${{ matrix.run_cmd && matrix.run_cmd || matrix.tool }} |