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

Feat: Preview environments #132

Merged
merged 61 commits into from
Jan 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
2ac3038
🚧 wip: sablier is working with swarm (yay)
Fredkiss3 Jan 18, 2024
7e29e61
Merge branch 'main' into chore/preview-envs
Fredkiss3 Jan 19, 2024
6d45a43
👷 dev DB & PROD DB
Fredkiss3 Jan 20, 2024
395b4f8
🔧 we should apply db migrations in dev also
Fredkiss3 Jan 20, 2024
136f54b
👷 make 2 replicas in prod
Fredkiss3 Jan 20, 2024
341ab45
🚧 CI change
Fredkiss3 Jan 20, 2024
370fa65
👷 update CI build system
Fredkiss3 Jan 20, 2024
a89f7c6
💚 escape env variables
Fredkiss3 Jan 20, 2024
df07e26
👷 error on exit in add* scripts
Fredkiss3 Jan 20, 2024
4aa1fee
💚 fix add-docker-app script
Fredkiss3 Jan 20, 2024
ce9447f
💚 will this work ?
Fredkiss3 Jan 20, 2024
af9af45
💚 fix replacement command
Fredkiss3 Jan 20, 2024
35a1abd
🔧 add caddy file
Fredkiss3 Jan 20, 2024
dd67daa
🔧 modify caddy logfile
Fredkiss3 Jan 20, 2024
8621893
👷 add dev caddy file
Fredkiss3 Jan 20, 2024
b9eb75e
🚧 WIP: dev certificates
Fredkiss3 Jan 20, 2024
4aad4d8
🔧 update caddy config
Fredkiss3 Jan 21, 2024
29ea82d
🔧 setup on_demand tls
Fredkiss3 Jan 21, 2024
200fb68
🔥 remove whoami on_demand_tls
Fredkiss3 Jan 21, 2024
91bc27a
👷 rename domain prefix
Fredkiss3 Jan 21, 2024
ec4d39e
🔧 log pr requests
Fredkiss3 Jan 21, 2024
18b8876
♻️ use `gh-` as the preview domain prefix instead of `pr-`
Fredkiss3 Jan 21, 2024
257ed0e
👷 log branch slug
Fredkiss3 Jan 21, 2024
f987fe3
💚 fix order in ci script
Fredkiss3 Jan 21, 2024
a8d8d2f
🔧 disable buffering in caddyfile
Fredkiss3 Jan 22, 2024
53f6dd9
🔧 add caddy JSON LSP & autocomplete
Fredkiss3 Jan 23, 2024
46989fe
🔥 remove unused deploy scripts
Fredkiss3 Jan 23, 2024
976c8d5
🚧 wip
Fredkiss3 Jan 23, 2024
5f579fe
🎉 start simple deploy script
Fredkiss3 Jan 23, 2024
b21de30
🔥 remove caddyfile as it is not needed for now
Fredkiss3 Jan 23, 2024
72aa2ac
🚧 disable PR workflow for now
Fredkiss3 Jan 23, 2024
9d9eace
🚧 wip
Fredkiss3 Jan 23, 2024
b5ca0dc
🙈 ignore notes
Fredkiss3 Jan 23, 2024
16f30f9
🔨 added new project for preview environment workflow setup
Fredkiss3 Jan 28, 2024
8488959
👷 use bun on the CI
Fredkiss3 Jan 28, 2024
1f278e0
💚 add missing flags to `bun run index.ts`
Fredkiss3 Jan 28, 2024
8ca796c
👷 fix sablier URL and add better display name for the PR environment
Fredkiss3 Jan 28, 2024
f56461e
🔥 cleanup unused files
Fredkiss3 Jan 28, 2024
a57fdda
🚚 move `getSession` into session.action file
Fredkiss3 Jan 28, 2024
07214ed
🐛 effectively handle auth accross subdomains
Fredkiss3 Jan 28, 2024
3dc7c78
♻️ redirect in login instead of revalidating
Fredkiss3 Jan 28, 2024
7f037e4
⏪ revert changes made to session
Fredkiss3 Jan 28, 2024
0cc6feb
🔥 remove temp session hackery
Fredkiss3 Jan 28, 2024
c5e2894
👷 update build system to show preview URL
Fredkiss3 Jan 28, 2024
a049ff6
💚 use the correct env name
Fredkiss3 Jan 28, 2024
c88487b
💚 add write deployment permission on CI job
Fredkiss3 Jan 28, 2024
ebefae6
👷 also report deployment on production
Fredkiss3 Jan 28, 2024
c538f27
💚 use https for env url
Fredkiss3 Jan 28, 2024
19bd1bf
💚 don't use dev in the workflow
Fredkiss3 Jan 28, 2024
6ed1159
💚 use dev (?) env
Fredkiss3 Jan 28, 2024
0af59ef
👷 remove deployment URL report
Fredkiss3 Jan 28, 2024
03482fd
👷 comment on PR the deployed url
Fredkiss3 Jan 28, 2024
00da8b9
💚 add write permission on PR
Fredkiss3 Jan 28, 2024
03534f1
👷 use correct comment url value
Fredkiss3 Jan 28, 2024
6949517
👷 don't pass unnecessary quotes
Fredkiss3 Jan 28, 2024
1fe8f02
🔊 log host+origin headers on login
Fredkiss3 Jan 28, 2024
00fe5a4
🔧 remove caddy JSON LSP
Fredkiss3 Jan 28, 2024
0d4b752
🔧 remove unnecessary conf for unused files
Fredkiss3 Jan 28, 2024
f34cf25
🔥 remove caddy file
Fredkiss3 Jan 28, 2024
0b43deb
👷 always reload docker stack
Fredkiss3 Jan 28, 2024
ecb4a7d
👷 log exit error content
Fredkiss3 Jan 28, 2024
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
45 changes: 31 additions & 14 deletions .github/workflows/deploy-with-docker-dev.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@ on:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
build-push-docker:
permissions:
pull-requests: write
runs-on: ubuntu-latest
environment: dev

Expand All @@ -26,8 +28,12 @@ jobs:
known_hosts: ${{ secrets.KNOWN_HOSTS }}

- name: Deploy to Server
id: deploy
run: |
BUILD_ARGS="--build-arg NEXT_PUBLIC_VERCEL_URL=gh-dev.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh-dev.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_dev_"
BUILD_ARGS="--build-arg NEXT_PUBLIC_VERCEL_URL=gh-${GITHUB_PR_NUMBER}.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.DEV_LOCAL_POSTGRES_DB_URL }} --build-arg REMOTE_DATABASE_URL=${{ secrets.DEV_REMOTE_POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_dev_"
GIT_BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
GITHUB_BRANCH_SLUG="${GIT_BRANCH//[^a-zA-Z0-9]/-}"
echo branch-slug=$GITHUB_BRANCH_SLUG
ssh -p $DEPLOY_PORT $DEPLOY_USER@$DEPLOY_DOMAIN "
source ~/.zshrc
set -e -o errexit
Expand All @@ -41,27 +47,38 @@ jobs:
nvm use 20

echo Pulling latest version...
GIT_BRANCH=${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}
echo git branch=\$GIT_BRANCH
git fetch origin \$GIT_BRANCH
git checkout \$GIT_BRANCH
git pull origin \$GIT_BRANCH
echo git branch=$GIT_BRANCH
git fetch origin $GIT_BRANCH
git checkout $GIT_BRANCH
git pull origin $GIT_BRANCH

echo 'Build with docker (and cache)...🔄'
export DOCKER_BUILDKIT=1

# Use cache from remote repository, tag as latest, keep cache metadata
docker buildx build --push $BUILD_ARGS -f ./docker/Dockerfile.dev -t dcr.fredkiss.dev/gh-next:dev .

echo 'build successful ✅'
# Build & push docker image
docker buildx build --push ${BUILD_ARGS} -f ./docker/Dockerfile.dev -t dcr.fredkiss.dev/gh-next:pr-${GITHUB_PR_NUMBER} .

# Start docker instances
echo 'updating docker services...🔄'
docker stack deploy --with-registry-auth --compose-file ./docker/docker-stack.dev.yaml gh-stack-dev
echo 'services updated succesfully ✅'
echo 'Docker build successful ✅'
cd pr-preview-workflow
bun install --frozen-lockfile
bun run index.ts --pr-id ${GITHUB_PR_NUMBER} \
--pr-branch ${GITHUB_BRANCH_SLUG} \
--caddy-config-path ${{ secrets.CADDY_CONFIG_DIR }} \
--reload-caddy --reload-docker
"
echo "url=https://gh-${GITHUB_PR_NUMBER}.gh.fredkiss.dev, https://gh-${GITHUB_BRANCH_SLUG}.gh.fredkiss.dev" >> $GITHUB_OUTPUT
env:
DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }}
DEPLOY_DIR: ${{ secrets.DEPLOY_DIR }}
DEPLOY_DOMAIN: ${{ secrets.DEPLOY_DOMAIN }}
DEPLOY_USER: ${{ secrets.DEPLOY_USER }}
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }}

- name: Comment PR with Deployed URL
uses: unsplash/comment-on-pr@v1.3.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
msg: 'Application deployed @: ${{ steps.deploy.outputs.url }}'
check_for_duplicate_msg: true

8 changes: 3 additions & 5 deletions .github/workflows/deploy-with-docker-prod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:

- name: Deploy to Server
run: |
BUILD_ARGS="--build-arg NEXT_PUBLIC_VERCEL_URL=gh.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_prod_"
BUILD_ARGS="--build-arg NEXT_PUBLIC_VERCEL_URL=gh.fredkiss.dev --build-arg GITHUB_REDIRECT_URI=https://gh.fredkiss.dev/api/auth/callback --build-arg SESSION_SECRET=${{ secrets.SESSION_SECRET }} --build-arg DATABASE_URL=${{ secrets.POSTGRES_DB_URL }} --build-arg REMOTE_DATABASE_URL=${{ secrets.REMOTE_POSTGRES_DB_URL }} --build-arg GITHUB_CLIENT_ID=${{ secrets.GH_CLIENT_ID }} --build-arg GITHUB_SECRET=${{ secrets.GH_SECRET }} --build-arg GITHUB_PERSONAL_ACCESS_TOKEN=${{ secrets.GH_PERSONAL_ACCESS_TOKEN }} --build-arg REDIS_HTTP_USERNAME=${{ secrets.REDIS_HTTP_USERNAME }} --build-arg REDIS_HTTP_PASSWORD=${{ secrets.REDIS_HTTP_PASSWORD }} --build-arg KV_PREFIX=__gh_next__cache_prod_"
ssh -p $DEPLOY_PORT $DEPLOY_USER@$DEPLOY_DOMAIN "
source ~/.zshrc
set -e -o errexit
Expand All @@ -50,10 +50,8 @@ jobs:
echo 'Build with docker (and cache)...🔄'
export DOCKER_BUILDKIT=1

# Use cache from remote repository, tag as latest, keep cache metadata
docker buildx build --push $BUILD_ARGS -f ./docker/Dockerfile.prod -t dcr.fredkiss.dev/gh-next:latest \
--cache-from type=registry,ref=dcr.fredkiss.dev/gh-next:prod-buildcache,mode=max \
--cache-to type=registry,ref=dcr.fredkiss.dev/gh-next:prod-buildcache,mode=max .
# Build & push docker image
docker buildx build --push $BUILD_ARGS -f ./docker/Dockerfile.prod -t dcr.fredkiss.dev/gh-next:latest .

echo 'build successful ✅'

Expand Down
93 changes: 0 additions & 93 deletions .github/workflows/docker-deploy-dev.old.yaml

This file was deleted.

95 changes: 0 additions & 95 deletions .github/workflows/docker-deploy-prod.old.yaml

This file was deleted.

10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,12 @@ next-env.d.ts
# cloudfare pages
.wrangler/
/cache/
.idea/
.idea/

# Docker
docker-stack.pr.yaml
caddyfile.pr
pr.caddyfile
*.bak
*.log
notes.md
11 changes: 7 additions & 4 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,14 +1,17 @@
{
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.tsdk": "node_modules/typescript/lib",
"editor.defaultFormatter": "biomejs.biome",
"[javascript]": {
"editor.defaultFormatter": "biomejs.biome"
},
"[typescript]": {
"editor.defaultFormatter": "biomejs.biome"
},
"[typescriptreact]": {
"editor.defaultFormatter": "biomejs.biome"
},
"[javascript]": {
"editor.defaultFormatter": "biomejs.biome",
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.tsdk": "node_modules/typescript/lib",
"[json]": {
"editor.defaultFormatter": "biomejs.biome"
}
}
4 changes: 3 additions & 1 deletion docker/Dockerfile.dev
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ RUN \

FROM node:20-alpine3.19 AS builder

ARG REMOTE_DATABASE_URL
ARG SESSION_SECRET
ARG DATABASE_URL
ARG GITHUB_CLIENT_ID
Expand All @@ -33,6 +34,7 @@ ARG REDIS_HTTP_USERNAME
ARG REDIS_HTTP_PASSWORD
ARG GITHUB_REDIRECT_URI="http://localhost:3000/api/auth/callback"

ENV REMOTE_DATABASE_URL=$REMOTE_DATABASE_URL
ENV NEXT_PUBLIC_VERCEL_URL=$NEXT_PUBLIC_VERCEL_URL
ENV SESSION_SECRET=$SESSION_SECRET
ENV DATABASE_URL=$DATABASE_URL
Expand All @@ -54,7 +56,7 @@ ENV NEXT_TELEMETRY_DISABLED 1
RUN \
if [ -f yarn.lock ]; then yarn build; \
elif [ -f package-lock.json ]; then npm run build; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm run build; \
elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm run db:migrate-docker && pnpm run build; \
else echo "Lockfile not found." && exit 1; \
fi

Expand Down
2 changes: 2 additions & 0 deletions docker/Dockerfile.prod
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ FROM node:20-alpine3.19 AS builder

ARG SESSION_SECRET
ARG DATABASE_URL
ARG REMOTE_DATABASE_URL
ARG GITHUB_CLIENT_ID
ARG GITHUB_SECRET
ARG GITHUB_PERSONAL_ACCESS_TOKEN
Expand All @@ -33,6 +34,7 @@ ARG REDIS_HTTP_URL="http://webdis:7379"
ARG NEXT_PUBLIC_VERCEL_URL="gh.fredkiss.dev"
ARG GITHUB_REDIRECT_URI="https://gh.fredkiss.dev/api/auth/callback"

ENV REMOTE_DATABASE_URL=$REMOTE_DATABASE_URL
ENV NEXT_PUBLIC_VERCEL_URL=$NEXT_PUBLIC_VERCEL_URL
ENV SESSION_SECRET=$SESSION_SECRET
ENV DATABASE_URL=$DATABASE_URL
Expand Down
24 changes: 0 additions & 24 deletions docker/docker-stack.dev.yaml

This file was deleted.

Loading
Loading