Skip to content

Schema for home, case, billing period, and related data (no homeowner, coach yet) #355

Schema for home, case, billing period, and related data (no homeowner, coach yet)

Schema for home, case, billing period, and related data (no homeowner, coach yet) #355

Workflow file for this run

name: Test, build, & deploy
on:
push:
branches:
- main
- gha-deployment
- dev
pull_request: {}
workflow_dispatch:
env:
rules-engine-working-directory: rules-engine
heat-stack-working-directory: heat-stack
defaults:
run:
working-directory: env.heat-stack-working-directory
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
actions: write
contents: read
jobs:
lint_rules_engine:
name: Rules Engine - Lint
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11.3"]
steps:
- uses: actions/checkout@v3
- name: Set up environment
uses: "./.github/actions/setup-rules-engine"
with:
python-version: ${{ matrix.python-version }}
working-directory: ${{ env.rules-engine-working-directory }}
- name: Check style
run: |
make lint
working-directory: ${{ env.rules-engine-working-directory }}
make-rules-engine-package:
name: Rules Engine - Mypy
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11.3"]
steps:
- uses: actions/checkout@v3
- name: Set up environment
uses: "./.github/actions/setup-rules-engine"
with:
python-version: ${{ matrix.python-version }}
working-directory: ${{ env.rules-engine-working-directory }}
- name: Check typing
run: |
make mypy
working-directory: ${{ env.rules-engine-working-directory }}
pytest-rules-engine:
name: Rules Engine - Pytest
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11.3"]
steps:
- uses: actions/checkout@v3
- name: Set up environment
uses: "./.github/actions/setup-rules-engine"
with:
python-version: ${{ matrix.python-version }}
working-directory: ${{ env.rules-engine-working-directory }}
- name: Run tests
run: |
make test
working-directory: ${{ env.rules-engine-working-directory }}
# Make the wheel
build-rules-engine:
name: Rules Engine - Build
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.11.3"]
steps:
- uses: actions/checkout@v3
- name: Set up environment
uses: "./.github/actions/setup-rules-engine"
with:
python-version: ${{ matrix.python-version }}
working-directory: ${{ env.rules-engine-working-directory }}
- name: Build wheel
run: |
make build
working-directory: ${{ env.rules-engine-working-directory }}
- name: list dist
run: |
ls -al dist
working-directory: ${{ env.rules-engine-working-directory }}
- name: store wheel as artifact
uses: actions/upload-artifact@v4
with:
name: python-rules-engine-wheel
path: ${{ env.rules-engine-working-directory }}/dist/
# Heat-Stack Jobs
lint-js:
name: ⬣ Heat-Stack - ESLint
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: ⎔ Setup node
uses: actions/setup-node@v3
with:
node-version: 20
- name: 📥 Download deps
uses: bahmutov/npm-install@v1
with:
working-directory: ${{ env.heat-stack-working-directory }}
- name: 🖼 Build icons
run: npm run build:icons
working-directory: ${{ env.heat-stack-working-directory }}
- name: 🔬 Lint
run: npm run lint
working-directory: ${{ env.heat-stack-working-directory }}
typecheck-js:
name: ʦ Heat-Stack - TypeScript
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: ⎔ Setup node
uses: actions/setup-node@v3
with:
node-version: 20
- name: 📥 Download deps
uses: bahmutov/npm-install@v1
with:
working-directory: ${{ env.heat-stack-working-directory }}
- name: 🖼 Build icons
working-directory: ${{ env.heat-stack-working-directory }}
run: npm run build:icons
- name: 🔎 Type check
working-directory: ${{ env.heat-stack-working-directory }}
run: npm run typecheck --if-present
vitest-pyodide-js:
name: ⚡ Heat-Stack - Vitest pyodide.test.ts
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: ⎔ Setup node
uses: actions/setup-node@v3
with:
node-version: 20
- name: 📥 Download deps
uses: bahmutov/npm-install@v1
with:
working-directory: ${{ env.heat-stack-working-directory }}
- name: 🏄 Copy test env vars
working-directory: ${{ env.heat-stack-working-directory }}
run: cp .env.example .env
- name: 🖼 Build icons
working-directory: ${{ env.heat-stack-working-directory }}
run: npm run build:icons
- name: ⚡ Run vitest
working-directory: ${{ env.heat-stack-working-directory }}
run: npm run test app/utils/pyodide.test.ts --
# --coverage
deploy-to-servers:
name: 🚀 Heat-Stack - Deploy
runs-on: ubuntu-22.04
needs: [lint-js, typecheck-js, vitest-pyodide-js] #, playwright-heat-stack]
# only build/deploy main branch on pushes
if:
${{ (github.ref == 'refs/heads/gha-deployment' || github.ref == 'refs/heads/main' || github.ref == 'refs/heads/dev') &&
github.event_name == 'push' }}
steps:
- uses: actions/checkout@v3
- name: 👀 Read app name
uses: SebRollen/[email protected]
id: app_name
with:
file: '${{ env.heat-stack-working-directory }}/fly.toml'
field: 'app'
# move Dockerfile to root
- name: 🚚 Move Dockerfile
working-directory: ${{ env.heat-stack-working-directory }}
run: |
mv ./other/Dockerfile ./Dockerfile
mv ./other/.dockerignore ./.dockerignore
- name: Pull Built Wheel Artifact
uses: actions/download-artifact@v4
with:
name: python-rules-engine-wheel
path: ${{ env.heat-stack-working-directory }}/public/pyodide-env/
- name: 🎈 Setup Fly
uses: superfly/flyctl-actions/[email protected]
- name: 🚀 Deploy Staging
if: ${{ github.ref == 'refs/heads/dev' }}
working-directory: ${{ env.heat-stack-working-directory }}
run:
flyctl deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }}
--app ${{ steps.app_name.outputs.value }}-staging
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
- name: 🚀 Deploy Production
if: ${{ github.ref == 'refs/heads/main' || github.ref == 'refs/heads/gha-deployment' }}
working-directory: ${{ env.heat-stack-working-directory }}
run:
flyctl deploy --remote-only --build-arg COMMIT_SHA=${{ github.sha }}
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}