Skip to content

replace toml to yaml #233

replace toml to yaml

replace toml to yaml #233

Workflow file for this run

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/[email protected]
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/[email protected]
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/[email protected]
- name: Run mdl for check markdown format
uses: nosborn/[email protected]
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 }}