Skip to content

feat: add some styles and update layout #55

feat: add some styles and update layout

feat: add some styles and update layout #55

Workflow file for this run

name: Test, Build, Delpoy
on: push
jobs:
test:
runs-on: ubuntu-22.04
env:
VITE_API_ORIGIN: http://localhost:3000
VITE_API_PATH: /api/v1/trpc
# variables for our back-end tests, see server/src/config.ts
DATABASE_URL: postgres://testuser:testpw@localhost:5432/testdb
TEST_DATABASE_URL: postgres://testuser:testpw@localhost:5433/testdbtest # Use a different port for the test database
services:
postgres:
image: postgres:16.1-alpine
env:
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpw
POSTGRES_DB: testdb
ports:
- 5432:5432
testdb:
image: postgres:16.1-alpine
env:
POSTGRES_USER: testuser
POSTGRES_PASSWORD: testpw
POSTGRES_DB: testdbtest
ports:
- 5433:5432
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20.14.0"
cache: "npm"
- name: Install dependencies
run: npm ci
- name: Type check server
run: npm run typecheck -w=server
- name: Type check client
run: npm run typecheck -w=client
- name: Lint code for server
run: npm run lint --fix -w=server
- name: Lint code for client
run: npm run lint -w=client
- name: Test client (unit)
run: npm run test:unit -w=client
- name: Run server database migrations
run: npm run migrate:latest -w=server
- name: Test server
run: npm run test -w=server
- name: Install Playwright Browsers
run: npx playwright install --with-deps chromium
- name: Start server for E2E tests
run: npm run dev -w=server &
- name: Build front end for E2E tests
run: npm run build -w=client
- name: Wait for server to startup
uses: Jtalk/url-health-check-action@v4
with:
max-attempts: 5
retry-delay: 5s
url: ${{ env.VITE_API_ORIGIN }}/api/health
- name: Test client E2E
run: npm run test:e2e -w=client
- uses: actions/upload-artifact@v4
if: always()
with:
name: playwright-report
path: client/playwright-report/
retention-days: 7
build-deploy:
needs: test
runs-on: ubuntu-22.04
if: github.ref == 'refs/heads/main'
environment: deploy
env:
CLIENT_IMAGE_TAG: client-${{ github.sha }}
SERVER_IMAGE_TAG: server-${{ github.sha }}
permissions:
id-token: write
contents: read
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Setup aws lightsail cli
run: |
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install --bin-dir /usr/local/bin --install-dir /usr/local/aws-cli --update
which aws
aws --version
sudo curl "https://s3.us-west-2.amazonaws.com/lightsailctl/latest/linux-amd64/lightsailctl" -o "/usr/local/bin/lightsailctl"
sudo chmod +x /usr/local/bin/lightsailctl
- name: Debug Environment Variables
run: |
echo AWS_REGION: ${{ vars.AWS_REGION }}
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-region: ${{ vars.AWS_REGION }}
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
- name: Build server image
run: >-
docker build
-t $SERVER_IMAGE_TAG
-f ./server/Dockerfile .
- name: Build client image
run: >-
docker build
-t $CLIENT_IMAGE_TAG
-f ./client/Dockerfile .
--build-arg VITE_UPLOADCARE_PUB_KEY=${{ secrets.VITE_UPLOADCARE_PUB_KEY }}
- name: Push server image
run: >-
aws lightsail push-container-image
--service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }}
--label $SERVER_IMAGE_TAG
--image $SERVER_IMAGE_TAG
--output yaml
- name: Push client image
run: >-
aws lightsail push-container-image
--service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }}
--label $CLIENT_IMAGE_TAG
--image $CLIENT_IMAGE_TAG
--output yaml
- name: Get Lightsail image tag
run: |
aws lightsail get-container-images --service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }} | jq -r '.containerImages[] | select(.image | contains(".'$SERVER_IMAGE_TAG'")) | .image'
echo "LIGHTSAIL_SERVER_IMAGE=$(aws lightsail get-container-images --service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }} | jq -r '.containerImages[] | select(.image | contains(".'$SERVER_IMAGE_TAG'")) | .image')" >> $GITHUB_ENV
echo "LIGHTSAIL_CLIENT_IMAGE=$(aws lightsail get-container-images --service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }} | jq -r '.containerImages[] | select(.image | contains(".'$CLIENT_IMAGE_TAG'")) | .image')" >> $GITHUB_ENV
- name: Create containers.json
run: |
echo '{
"client": {
"image": "${{ env.LIGHTSAIL_CLIENT_IMAGE }}",
"command": [],
"ports": {
"80": "HTTP"
},
"environment": {
"API_PROXY_PASS": "http://localhost:3000",
"VITE_UPLOADCARE_PUB_KEY": "${{ secrets.VITE_UPLOADCARE_PUB_KEY }}"
}
},
"server": {
"image": "${{ env.LIGHTSAIL_SERVER_IMAGE }}",
"ports": {
"3000": "HTTP"
},
"environment": {
"NODE_ENV": "production",
"PORT": "3000",
"DATABASE_URL": "${{ secrets.PROD_DATABASE_URL }}",
"TEST_DATABASE_URL": "${{ secrets.TEST_DATABASE_URL }}",
"TOKEN_KEY": "${{ secrets.PROD_TOKEN_KEY }}"
}
}
}' > containers.json
- name: Create public-endpoint.json file
run: |
echo '{
"containerName": "client",
"containerPort": 80,
"healthCheck": {
"intervalSeconds": 10,
"path": "/api/health"
}
}' > public-endpoint.json
- name: Deploy to AWS Lightsail
run: |
aws lightsail create-container-service-deployment \
--service-name ${{ vars.AWS_LIGHTSAIL_SERVICE }} \
--containers file://containers.json \
--public-endpoint file://public-endpoint.json