# This workflow will install Python dependencies, run tests and lint with a variety of Python versions # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions name: Nightly Release on: schedule: - cron: '0 5 * * *' workflow_dispatch: jobs: build: runs-on: a100 strategy: fail-fast: false matrix: python-version: ["3.10"] backend: [IREE, SHARK] steps: - uses: actions/checkout@v3 - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v3 with: python-version: ${{ matrix.python-version }} - name: Setup pip cache uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Compute version run: | package_version="$(printf '%(%Y%m%d)T.${{ github.run_number }}')" tag_name="${package_version}" echo "package_version=${package_version}" >> $GITHUB_ENV echo "tag_name=${tag_name}" >> $GITHUB_ENV - name: Set Environment Variables run: | echo "SHORT_SHA=`git rev-parse --short=4 HEAD`" >> $GITHUB_ENV echo "DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.NODAI_INVOCATION_TOKEN }} with: tag_name: ${{ env.tag_name }} release_name: nod.ai SHARK ${{ env.tag_name }} body: | Automatic snapshot release of nod.ai SHARK. draft: true prerelease: false - name: Find Torch-MLIR Release run: | TM_HTML_URL="$(python3 -c "import urllib.request, json, sys; u=json.loads(urllib.request.urlopen('https://api.github.com/repos/llvm/torch-mlir/releases/latest').read().decode()).get('html_url', False); print(u) if u else sys.exit(1);")" TM_RELEASE_DIR=${TM_HTML_URL/"tag"/"expanded_assets"} echo "TM_RELEASE_DIR=${TM_RELEASE_DIR}" >> $GITHUB_ENV - name: Install dependencies run: | echo "Torch-MLIR Release DIR is ${{ env.TM_RELEASE_DIR }}" python -m pip install --upgrade pip python -m pip install flake8 pytest toml if [ -f requirements.txt ]; then pip install -r requirements.txt -f ${{ env.TM_RELEASE_DIR }} -f https://github.com/nod-ai/SHARK-Runtime/releases; fi - name: Lint with flake8 run: | # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude shark.venv,lit.cfg.py # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics --exclude shark.venv,lit.cfg.py - name: Build and validate the IREE package if: ${{ matrix.backend == 'IREE' }} run: | cd $GITHUB_WORKSPACE USE_IREE=1 VENV_DIR=iree.venv ./setup_venv.sh source iree.venv/bin/activate package_version="$(printf '%(%Y%m%d)T.${{ github.run_number }}')" SHARK_PACKAGE_VERSION=${package_version} \ pip wheel -v -w wheelhouse . --pre -f https://download.pytorch.org/whl/nightly/torch -f ${{ env.TM_RELEASE_DIR }} -f https://github.com/iree-org/iree/releases # Install the built wheel pip install ./wheelhouse/nodai* # Validate the Models /bin/bash "$GITHUB_WORKSPACE/build_tools/populate_sharktank_ci.sh" pytest --ci --ci_sha=${SHORT_SHA} --local_tank_cache="./gen_shark_tank/" tank/test_models.py | tail -n 1 | tee -a pytest_results.txt if !(grep -Fxq " failed" pytest_results.txt) then export SHA=$(git log -1 --format='%h') gsutil -m cp -r $GITHUB_WORKSPACE/gen_shark_tank/* gs://shark_tank/$SHA gsutil -m cp -r gs://shark_tank/$SHA/* gs://shark_tank/latest/ fi rm -rf ./wheelhouse/nodai* - name: Build and validate the SHARK Runtime package if: ${{ matrix.backend == 'SHARK' }} run: | cd $GITHUB_WORKSPACE ./setup_venv.sh source shark.venv/bin/activate package_version="$(printf '%(%Y%m%d)T.${{ github.run_number }}')" SHARK_PACKAGE_VERSION=${package_version} \ pip wheel -v -w wheelhouse . --pre -f https://download.pytorch.org/whl/nightly/torch -f ${{ env.TM_RELEASE_DIR }} -f https://github.com/nod-ai/SHARK-Runtime/releases # Install the built wheel pip install ./wheelhouse/nodai* # Validate the Models pytest --ci --ci_sha=${SHORT_SHA} --local_tank_cache="./gen_shark_tank/" tank/test_models.py | tail -n 1 | tee -a pytest_results.txt - name: Upload Release Assets if: ${{ matrix.backend == 'SHARK' }} id: upload-release-assets uses: dwenegar/upload-release-assets@v1 env: GITHUB_TOKEN: ${{ secrets.NODAI_INVOCATION_TOKEN }} with: release_id: ${{ steps.create_release.outputs.id }} assets_path: ${GITHUB_WORKSPACE}/wheelhouse/nodai_*.whl - name: Publish Release if: ${{ matrix.backend == 'SHARK' }} id: publish_release uses: eregon/publish-release@v1 env: GITHUB_TOKEN: ${{ secrets.NODAI_INVOCATION_TOKEN }} with: release_id: ${{ steps.create_release.outputs.id }}