diff --git a/.github/actions/setup-rules-engine/action.yml b/.github/actions/setup-rules-engine/action.yml index 9c82fcf7..d286124f 100644 --- a/.github/actions/setup-rules-engine/action.yml +++ b/.github/actions/setup-rules-engine/action.yml @@ -4,6 +4,9 @@ inputs: python-version: description: Python version to use (e.g. "3.10") required: true + working-directory: + description: The working directory for the rules engine + required: true runs: using: "composite" steps: @@ -12,7 +15,7 @@ runs: with: python-version: ${{ inputs.python-version }} - name: Install dependencies - working-directory: ${{ env.working-directory }} + working-directory: ${{ inputs.working-directory }} shell: bash run: | python -m pip install --upgrade pip diff --git a/.github/workflows/heat-stack.yml b/.github/workflows/heat-stack.yml index 59b2a4c8..2cdd20d5 100644 --- a/.github/workflows/heat-stack.yml +++ b/.github/workflows/heat-stack.yml @@ -1,18 +1,21 @@ -name: whole heat-stack -on: +name: Test, build, & deploy + +on: push: branches: - main - gha-deployment - dev pull_request: {} + workflow_dispatch: env: - working-directory: heat-stack + rules-engine-working-directory: rules-engine + heat-stack-working-directory: heat-stack defaults: run: - working-directory: heat-stack + working-directory: env.heat-stack-working-directory concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -23,170 +26,190 @@ permissions: contents: read jobs: - lint: - name: ⬣ ESLint + 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: - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - + - 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.working-directory }} - + working-directory: ${{ env.heat-stack-working-directory }} - name: 🖼 Build icons - working-directory: ${{ env.working-directory }} run: npm run build:icons - + working-directory: ${{ env.heat-stack-working-directory }} - name: 🔬 Lint - working-directory: ${{ env.working-directory }} run: npm run lint - + working-directory: ${{ env.heat-stack-working-directory }} - typecheck: - name: ʦ TypeScript + typecheck-js: + name: ʦ Heat-Stack - TypeScript runs-on: ubuntu-22.04 steps: - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - + - 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.working-directory }} - + 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: - name: ⚡ Vitest pyodide.test.ts + vitest-pyodide-js: + name: ⚡ Heat-Stack - Vitest pyodide.test.ts runs-on: ubuntu-22.04 steps: - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 - + - 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.working-directory }} - + 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 - run: npm run test app/utils/pyodide.test.ts -- # --coverage - - # playwright tests work great but slight jank/inconsistency passing, and not used yet, so disabling for now - # playwright: - # name: 🎭 Playwright - # runs-on: ubuntu-22.04 - # timeout-minutes: 60 - # steps: - # - name: ⬇️ Checkout repo - # uses: actions/checkout@v3 - - # - name: 🏄 Copy test env vars - # run: cp .env.example .env - - # - name: ⎔ Setup node - # uses: actions/setup-node@v3 - # with: - # node-version: 18 - - # - name: 📥 Download deps - # uses: bahmutov/npm-install@v1 - # with: - # working-directory: ${{ env.working-directory }} - - # - name: 📥 Install Playwright Browsers - # run: npm run test:e2e:install - - # - name: 🛠 Setup Database - # run: npx prisma migrate deploy - - # - name: 🏦 Cache Database - # id: db-cache - # uses: actions/cache@v3 - # with: - # path: prisma/data.db - # key: - # db-cache-schema_${{ hashFiles('./prisma/schema.prisma') - # }}-migrations_${{ hashFiles('./prisma/migrations/*/migration.sql') - # }} - - # - name: 🌱 Seed Database - # if: steps.db-cache.outputs.cache-hit != 'true' - # run: npx prisma db seed - # env: - # MINIMAL_SEED: true - - # - name: 🏗 Build - # run: npm run build - - # - name: 🎭 Playwright tests - # run: npx playwright test - - # - name: 📊 Upload report - # uses: actions/upload-artifact@v3 - # if: always() - # with: - # name: playwright-report - # path: playwright-report/ - # retention-days: 30 - - deploy: - name: 🚀 Deploy + 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, typecheck, vitest] #, playwright] + 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: - - name: ⬇️ Checkout repo - uses: actions/checkout@v3 + - uses: actions/checkout@v3 - name: 👀 Read app name uses: SebRollen/toml-action@v1.0.2 id: app_name with: - file: '${{ env.working-directory }}/fly.toml' + 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/setup-flyctl@v1.4 - 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 @@ -195,7 +218,8 @@ jobs: - 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 }} + FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/test-rules-engine.yml b/.github/workflows/test-rules-engine.yml deleted file mode 100644 index fc069fcf..00000000 --- a/.github/workflows/test-rules-engine.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: rules engine - -on: [push, pull_request] - -env: - working-directory: rules-engine - -defaults: - run: - working-directory: rules-engine - -jobs: - lint: - runs-on: ubuntu-latest - strategy: - matrix: - python-version: ["3.11.3"] # Check python version at https://pyodide.org/en/stable/project/changelog.html - - steps: - - uses: actions/checkout@v3 - - name: Set up environment - uses: "./.github/actions/setup-rules-engine" - with: - python-version: ${{ matrix.python-version }} - - name: Check style - run: | - make lint - 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 }} - - name: Check typing - run: | - make mypy - 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 }} - - name: Run tests - run: | - make test - 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 }} - - name: Build wheel - run: | - make build diff --git a/heat-stack/README.md b/heat-stack/README.md index 235e385b..f66dd179 100644 --- a/heat-stack/README.md +++ b/heat-stack/README.md @@ -14,10 +14,10 @@ nvm use 20 # install and patch the environment npm install +npm run buildpy # to build rules engine into `public/pyodide-env` npm run dev ``` - ### Set up in a new GitHub CodingSpace: ``` @@ -26,6 +26,7 @@ cp .env.example .env nvm use 20 npm install +npm run buildpy # to build rules engine into `public/pyodide-env` npm run dev ``` diff --git a/heat-stack/app/components/ui/heat/CaseSummaryComponents/CurrentHeatingSystem.tsx b/heat-stack/app/components/ui/heat/CaseSummaryComponents/CurrentHeatingSystem.tsx index 9df07b8b..4866f871 100644 --- a/heat-stack/app/components/ui/heat/CaseSummaryComponents/CurrentHeatingSystem.tsx +++ b/heat-stack/app/components/ui/heat/CaseSummaryComponents/CurrentHeatingSystem.tsx @@ -1,6 +1,7 @@ +import { useForm, getInputProps } from '@conform-to/react' import { Form } from '@remix-run/react' -import { Button } from '#/app/components/ui/button.tsx' import { ErrorList } from './ErrorList.tsx' +import { Button } from '#/app/components/ui/button.tsx' import { Input } from '#/app/components/ui/input.tsx' import { Label } from '#/app/components/ui/label.tsx' @@ -27,11 +28,7 @@ export function CurrentHeatingSystem(props: CurrentHeatingSystemProps) {