Skip to content
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
120 changes: 93 additions & 27 deletions .github/workflows/build_push_image.yaml
Original file line number Diff line number Diff line change
@@ -1,69 +1,135 @@
name: Build and Push image to Hub
name: Build and Push Docker Images

on:
push:
branches:
- main

jobs:
run_migrations:
# Detect which apps have changes
detect-changes:
runs-on: ubuntu-latest
outputs:
web: ${{ steps.filter.outputs.web }}
server: ${{ steps.filter.outputs.server }}
database: ${{ steps.filter.outputs.database }}
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Check for migration changes
- name: Detect file changes
uses: dorny/paths-filter@v3
id: changes
id: filter
with:
filters: |
migrations:
- 'prisma/migrations/**'
web:
- 'apps/web/**'
- 'packages/database/**'
- 'packages/types/**'
- 'pnpm-lock.yaml'
server:
- 'apps/server/**'
- 'packages/database/**'
- 'packages/types/**'
- 'pnpm-lock.yaml'
database:
- 'packages/database/prisma/migrations/**'

# Run database migrations if there are migration changes
run-migrations:
needs: detect-changes
if: needs.detect-changes.outputs.database == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.0.0

- name: Setup Node
if: steps.changes.outputs.migrations == 'true'
uses: actions/setup-node@v4
with:
node-version: '20'
node-version: "20"
cache: "pnpm"

- name: Install Dependencies
if: steps.changes.outputs.migrations == 'true'
run: npm install
run: pnpm install --frozen-lockfile

- name: Run Migrations
if: steps.changes.outputs.migrations == 'true'
run: npx prisma migrate deploy
run: pnpm --filter @flagout/database exec prisma migrate deploy
env:
DATABASE_URL: ${{ secrets.DATABASE_URL }}


build_and_push:
needs: run_migrations
# Build and push web app
build-web:
needs: [detect-changes, run-migrations]
if: |
always() &&
needs.detect-changes.outputs.web == 'true' &&
(needs.run-migrations.result == 'success' || needs.run-migrations.result == 'skipped')
runs-on: ubuntu-latest
steps:
- name: Login to Docker
- name: Checkout Code
uses: actions/checkout@v4

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Checkout Code
uses: actions/checkout@v5

- name: Docker Buildx
- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3

# - name: QEMU
# uses: docker/setup-qemu-action@v3

- name: Build and Push
- name: Build and Push Web Image
uses: docker/build-push-action@v6
with:
context: .
file: apps/web/Dockerfile
push: true
tags: sreesen/flag0ut:latest
tags: |
sreesen/flag0ut:latest
sreesen/flag0ut:${{ github.sha }}
build-args: |
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=${{ secrets.NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY }}
NEXT_PUBLIC_CLERK_SIGN_IN_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_IN_URL }}
NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_IN_FALLBACK_REDIRECT_URL }}
NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL }}
NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL=${{ secrets.NEXT_PUBLIC_CLERK_SIGN_UP_FALLBACK_REDIRECT_URL }}
cache-from: type=gha
cache-to: type=gha,mode=max

# Build and push server app
build-server:
needs: [detect-changes, run-migrations]
if: |
always() &&
needs.detect-changes.outputs.server == 'true' &&
(needs.run-migrations.result == 'success' || needs.run-migrations.result == 'skipped')
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_TOKEN }}

- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Build and Push Server Image
uses: docker/build-push-action@v6
with:
context: .
file: apps/server/Dockerfile
push: true
tags: |
sreesen/flag0ut-server:latest
sreesen/flag0ut-server:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
104 changes: 82 additions & 22 deletions .github/workflows/format_lint.yaml
Original file line number Diff line number Diff line change
@@ -1,30 +1,90 @@
name: "Format and Lint CI"
name: Format and Lint CI

on:
push:
branches:
- main
pull_request:
branches:
- main
push:
branches:
- main
pull_request:
branches:
- main

jobs:
lint_and_format:
runs-on: ubuntu-latest
# Detect which apps have changes
detect-changes:
runs-on: ubuntu-latest
outputs:
web: ${{ steps.filter.outputs.web }}
server: ${{ steps.filter.outputs.server }}
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Detect file changes
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
web:
- 'apps/web/**'
- 'packages/**'
server:
- 'apps/server/**'
- 'packages/**'

# Lint and format web app
lint-web:
needs: detect-changes
if: needs.detect-changes.outputs.web == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.0.0

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Format web
run: pnpm --filter @flagout/web format

- name: Lint web
run: pnpm --filter @flagout/web lint

# Lint and format server app
lint-server:
needs: detect-changes
if: needs.detect-changes.outputs.server == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

steps:
- name: Checkout code
uses: actions/checkout@v5
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
version: 9.0.0

- name: Set up Nodejs
uses: actions/setup-node@v3
with:
node-version: 22.19.0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "pnpm"

- name: Install dependencies
run: npm install
- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Format code
run: npm run format
- name: Format server
run: pnpm --filter @flagout/server format

- name: Lint code
run: npm run lint
- name: Lint server
run: pnpm --filter @flagout/server lint
63 changes: 27 additions & 36 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,45 +1,36 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# Dependencies
node_modules/
.pnpm-store/

# dependencies
/node_modules
/.pnp
.pnp.*
.yarn/*
!.yarn/patches
!.yarn/plugins
!.yarn/releases
!.yarn/versions

# testing
/coverage
# Build outputs
.next/
dist/
*.tsbuildinfo

# next.js
/.next/
/out/
# Environment
.env
.env.local
.env.*.local

# production
/build
# IDE
.vscode/
.idea/
*.swp
*.swo

# misc
# OS
.DS_Store
*.pem
Thumbs.db

# debug
# Logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*
pnpm-debug.log*

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts

.env
# Testing
coverage/
.nyc_output/

/src/generated/prisma
# Prisma
prisma/*.db
prisma/*.db-journal
21 changes: 21 additions & 0 deletions apps/server/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# dependencies
/node_modules

# build output
/dist

# misc
.DS_Store
*.pem

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.pnpm-debug.log*

# env files
.env*

# typescript
*.tsbuildinfo
File renamed without changes.
Loading