Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Pyodide in form #176

Merged
merged 8 commits into from
May 22, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/actions/setup-rules-engine/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand All @@ -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
Expand Down
228 changes: 126 additions & 102 deletions .github/workflows/heat-stack.yml
Original file line number Diff line number Diff line change
@@ -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 }}
Expand All @@ -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/[email protected]
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/[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
Expand All @@ -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 }}
Loading
Loading