Skip to content

Commit

Permalink
feat: ✨ add .github
Browse files Browse the repository at this point in the history
  • Loading branch information
KevinWu098 committed Feb 3, 2025
1 parent 5536708 commit 8a4e6dd
Show file tree
Hide file tree
Showing 5 changed files with 199 additions and 0 deletions.
13 changes: 13 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## Description

## Test Plan

<!-- What to do to make sure that the feature works? -->

## Issues

<!-- What issues are related to or will be closed by this PR? -->

- Closes #

<!-- ## Future Follow-Up -->
32 changes: 32 additions & 0 deletions .github/actions/setup-node-and-pnpm/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/github-action.json
---
name: Setup Node.js and pnpm

description: Sets up Node.js and pnpm + pnpm cache. Does **not** install dependencies.

runs:
using: composite

steps:
- name: Setup Node.js environment
uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4
with:
node-version: lts/hydrogen

- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: false

- name: Get pnpm store directory
id: pnpm-cache
shell: bash
run: echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT

- name: Setup pnpm cache
uses: actions/cache@704facf57e6136b1bc63b828d79edcd491f0ee84 # v3
with:
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: ${{ runner.os }}-pnpm-store-
47 changes: 47 additions & 0 deletions .github/workflows/deploy-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/github-workflow.json
---
name: Deploy to production

on:
push:
branches:
- main
workflow_dispatch:

permissions:
id-token: write
contents: read
deployments: write
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CERTIFICATE_ARN: ${{ secrets.CERTIFICATE_ARN }}
DATABASE_URL: ${{ secrets.PROD_DB_URL }}
MIGRATION_DB_URL: ${{ secrets.MIGRATION_DB_URL }}

jobs:
deploy:
runs-on: ubuntu-latest

environment:
name: production
url: https://zotmeet.com

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-and-pnpm

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

- name: Deploy ZotMeet to production
run: STAGE=prod pnpm db:migrate && pnpm sst deploy --stage prod
51 changes: 51 additions & 0 deletions .github/workflows/deploy-staging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/github-workflow.json
---
name: Deploy to staging

on:
pull_request:
types:
- opened
- synchronize
- unlabeled

permissions:
id-token: write
contents: read
deployments: write
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CERTIFICATE_ARN: ${{ secrets.CERTIFICATE_ARN }}
DATABASE_URL: ${{ secrets.DEV_DB_URL }}
PR_NUM: ${{ github.event.pull_request.number }}
MIGRATION_DB_URL: ${{ secrets.MIGRATION_DB_URL }}

jobs:
deploy:
if: (!contains(github.event.pull_request.labels.*.name, 'no deploy'))

runs-on: ubuntu-latest

environment:
name: staging-${{ github.event.pull_request.number }}
url: https://staging-${{ github.event.pull_request.number }}.zotmeet.com

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-and-pnpm

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

- name: Deploy ZotMeet to staging
run: pnpm db:migrate && pnpm sst deploy --stage staging-$PR_NUM
56 changes: 56 additions & 0 deletions .github/workflows/destroy-staging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# yaml-language-server: $schema=https://raw.githubusercontent.com/SchemaStore/schemastore/master/src/schemas/json/github-workflow.json
---
name: Destroy staging build

on:
pull_request:
types:
- closed
- labeled

permissions:
id-token: write
contents: read
deployments: write
pull-requests: write

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
CERTIFICATE_ARN: ${{ secrets.CERTIFICATE_ARN }}
DATABASE_URL: ${{ secrets.DEV_DB_URL }}
PR_NUM: ${{ github.event.pull_request.number }}

jobs:
destroy:
if: (github.event.action == 'labeled' && github.event.label.name == 'no deploy') || github.event.action == 'closed'

runs-on: ubuntu-latest

environment:
name: staging-${{ github.event.pull_request.number }}
url: https://staging-${{ github.event.pull_request.number }}.zotmeet.com

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-and-pnpm

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

- name: Destroy ZotMeet staging build
run: pnpm sst remove --stage staging-$PR_NUM

- name: Set ZotMeet staging environment to inactive
uses: strumwolf/[email protected]
with:
token: ${{ secrets.GITHUB_TOKEN }}
environment: staging-${{ github.event.pull_request.number }}
onlyDeactivateDeployments: true

0 comments on commit 8a4e6dd

Please sign in to comment.