Skip to content

feat: set unique on adding field if mode 2 is in use. closes #41 #139

feat: set unique on adding field if mode 2 is in use. closes #41

feat: set unique on adding field if mode 2 is in use. closes #41 #139

Workflow file for this run

name: 🚀 Deploy
on:
push:
branches:
- main
release:
types: [published]
pull_request: {}
jobs:
prepare:
name: 🎫 Prepare
runs-on: ubuntu-latest
outputs:
app: ${{ steps.filter.outputs.app }}
docs: ${{ steps.filter.outputs.docs }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 💾 Cache Node Modules
id: node-cache
uses: actions/cache@v4
with:
path: node_modules
key:
node-modules-${{ hashFiles('package-lock.json',
'prisma/schema.prisma') }}
- name: 📥 Download deps
if: steps.node-cache.outputs.cache-hit != 'true'
run: npm install
- name: 🧭 Find Changes
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
app:
- 'app/**'
- 'package.json'
- 'package-lock.json'
- 'prisma/**'
- 'public/**'
- '.github/workflows/**'
- 'tests/**'
- Dockerfile
- docker-entrypoint.sh
docs:
- 'docs/**'
- '.github/workflows/**'
lint:
name: ⬣ ESLint
needs: prepare
if:
${{ needs.prepare.outputs.app == 'true' || startsWith(github.ref,
'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-lint
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 💾 Cache Node Modules
id: node-cache
uses: actions/cache@v4
with:
path: node_modules
key:
node-modules-${{ hashFiles('package-lock.json',
'prisma/schema.prisma') }}
- name: 🎨 Create Database
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma migrate dev
- name: ⁉️ Generate Typed SQL
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma generate --sql
- name: 🔬 Lint
run: npm run lint
typecheck:
name: ʦ TypeScript
needs: prepare
if:
${{ needs.prepare.outputs.app == 'true' || startsWith(github.ref,
'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-ts
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 💾 Cache Node Modules
id: node-cache
uses: actions/cache@v4
with:
path: node_modules
key:
node-modules-${{ hashFiles('package-lock.json',
'prisma/schema.prisma') }}
- name: 🎨 Create Database
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma migrate dev
- name: ⁉️ Generate Typed SQL
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma generate --sql
- name: 🔎 Type check
run: npm run typecheck
prettier:
name: ✨Prettier
needs: prepare
if:
${{ needs.prepare.outputs.app == 'true' || startsWith(github.ref,
'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-prettier
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 💾 Cache Node Modules
id: node-cache
uses: actions/cache@v4
with:
path: node_modules
key:
node-modules-${{ hashFiles('package-lock.json',
'prisma/schema.prisma') }}
- name: ✨ Prettier Check
run: npm run prettier
test:
name: 🧪Test
needs: prepare
if:
${{ needs.prepare.outputs.app == 'true' || startsWith(github.ref,
'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-test
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ⎔ Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: 💾 Cache Node Modules
id: node-cache
uses: actions/cache@v4
with:
path: node_modules
key:
node-modules-${{ hashFiles('package-lock.json',
'prisma/schema.prisma') }}
- name: 🎨 Create Database
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma migrate dev
- name: ⁉️ Generate Typed SQL
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
run: npx prisma generate --sql
- name: 🧪 Test
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}
PASSWORD_IV: ${{ secrets.PASSWORD_IV }}
PASSWORD_KEY: ${{ secrets.PASSWORD_KEY }}
PASSWORD_SALT: ${{ secrets.PASSWORD_SALT }}
run: npm run test:ci
- name: 📔 Coverage
uses: davelosert/vitest-coverage-report-action@v2
build:
name: 🐳 Build
needs: [lint, typecheck, prettier, test]
if:
${{ needs.prepare.outputs.app == 'true' || startsWith(github.ref,
'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-docker
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: ☁️ Set up QEMU
uses: docker/setup-qemu-action@v3
- name: 🐳 Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
platforms: linux/amd64,linux/arm64
# Setup cache
- name: ⚡️ Cache Docker layers
uses: actions/cache@v4
with:
path: /tmp/.buildx-cache
key: ${{ runner.os }}-buildx-${{ github.sha }}
restore-keys: |
${{ runner.os }}-buildx-
- name: 🔑 Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD}}
- name: 🔎 Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: longridgehighschool/net-doc
tags: |
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
type=ref,event=branch
type=ref,event=pr
type=sha
flavor: |
latest=auto
- name: 🐳 Docker build
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=local,src=/tmp/.buildx-cache
cache-to: type=local,mode=max,dest=/tmp/.buildx-cache-new
platforms: linux/amd64,linux/arm64
- name: 📃 Push Read Me
uses: christian-korneck/update-container-description-action@v1
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
env:
DOCKER_USER: ${{ secrets.DOCKER_USERNAME }}
DOCKER_PASS: ${{ secrets.DOCKER_PASSWORD }}
with:
destination_container_repo: longridgehighschool/net-doc
provider: dockerhub
short_description: 'A highly configurable documentation system.'
readme_file: 'README.md'
# This ugly bit is necessary if you don't want your cache to grow forever
# till it hits GitHub's limit of 5GB.
# Temp fix
# https://github.com/docker/build-push-action/issues/252
# https://github.com/moby/buildkit/issues/1896
- name: Move cache
run: |
rm -rf /tmp/.buildx-cache
mv /tmp/.buildx-cache-new /tmp/.buildx-cache
docs:
name: 📚 Docs
needs: [prepare]
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-docs
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
steps:
- name: ⬇️ Checkout repo
uses: actions/checkout@v4
- name: 💎 Setup Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: '3.3' # Not needed with a .ruby-version file
bundler-cache: false # runs 'bundle install' and caches installed gems automatically
- name: 🏗️ Build Docs
run: cd docs && bundle install && bundle exec jekyll build
- name: 🚀 Deploy
#if: ${{ startsWith(github.ref, 'refs/tags/v') }}
uses: JamesIves/github-pages-deploy-action@v4
with:
branch: gh-pages
folder: docs/_site