Skip to content

Commit

Permalink
Fix workflows (#46)
Browse files Browse the repository at this point in the history
  • Loading branch information
juancwu authored Nov 26, 2024
2 parents ea1d018 + 1e772b5 commit 942438d
Show file tree
Hide file tree
Showing 9 changed files with 84 additions and 98 deletions.
73 changes: 0 additions & 73 deletions .github/workflows/backend/test-backend.yml

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,9 @@ jobs:
rm -rf repo
git clone [email protected]:${{ github.repository }}.git repo
cd repo
cd backend
echo "Copy deploy preview script"
cp .github/scripts/deploy-preview.sh .
cp ../.github/scripts/deploy-preview.sh .
echo "Running deploy-preview.sh"
chmod +x deploy-preview.sh
./deploy-preview.sh
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,16 @@ jobs:
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install dependencies
run: pnpm install --frozen-lockfile
run: cd frontend && pnpm install --frozen-lockfile
- name: Build
run: pnpm build
run: cd frontend && pnpm build
- name: Deploy to server
uses: appleboy/scp-action@master
with:
host: ${{ secrets.PREVIEW_SERVER_IP }}
username: ${{ secrets.PREVIEW_USER }}
key: ${{ secrets.PREVIEW_SERVER_SSH_KEY }}
source: "dist/"
source: "frontend/dist/"
target: "${{ secrets.TARGET_DIR }}"
strip_components: 1

59 changes: 59 additions & 0 deletions .github/workflows/test-backend.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
on:
push:
branches: ['main', 'staging', 'prod']
paths:
- 'backend/**'
pull_request:
branches: ['main', 'staging', 'prod']
paths:
- 'backend/**'
jobs:
test-backend:
name: Test Backend
runs-on: ubuntu-latest
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_PORT: 5432
POSTGRES_DB: postgres
options: >-
--health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
ports:
- 5432:5432
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.23'
cache: true
- name: Install dependencies
run: cd backend && go mod download
- name: Install Goose
run: cd backend && go install github.com/pressly/goose/v3/cmd/[email protected]
- name: Run migrations
run: cd backend && goose -dir .sqlc/migrations postgres "postgres://postgres:postgres@localhost:5432/postgres?sslmode=disable" up
- name: Run tests
run: |
# run tests and capture output
cd backend
go test -v -coverprofile=coverage.out ./...
- name: Generate coverage report
if: ${{ !env.ACT && github.event_name == 'pull_request' && always() }}
run: cd backend && go tool cover -html=coverage.out -o coverage.html
- name: Upload coverage report
if: ${{ !env.ACT && github.event_name == 'pull_request' && always() }}
uses: actions/upload-artifact@v4
with:
name: coverage-report-backend
path: backend/coverage.html
# - name: Comment PR
# if: ${{ !env.ACT && github.event_name == 'pull_request' && always() }}
# uses: actions/github-script@v7
# with:
# github-token: ${{ secrets.GITHUB_TOKEN }}
# script: "const fs = require('fs');\n\n// Read test output\nconst testOutput = fs.readFileSync('backend/test_output.txt', 'utf8');\n\n// Get coverage - look for the last coverage number in the output\nlet coverage = 'N/A';\nconst coverageMatches = testOutput.match(/coverage: (\\d+\\.\\d+)% of statements/g) || [];\nif (coverageMatches.length > 0) {\n const lastMatch = coverageMatches[coverageMatches.length - 1];\n coverage = lastMatch.match(/(\\d+\\.\\d+)%/)[1] + '%';\n}\n\n// Check if any tests failed\nconst hasFailed = testOutput.includes('FAIL') && !testOutput.includes('FAIL\\t[build failed]');\nconst testStatus = hasFailed ? 'failure' : 'success';\nconst color = testStatus === 'success' ? '✅' : '❌';\n\n// Parse test failures\nlet failureDetails = '';\nif (hasFailed) {\n const errorTraces = testOutput.match(/\\s+.*?_test\\.go:\\d+:[\\s\\S]*?Test:\\s+.*$/gm) || [];\n const failures = testOutput.match(/--- FAIL: .*?(?=(?:---|\\z))/gs) || [];\n \n failureDetails = `\n <details>\n <summary>❌ Test Failures</summary>\n \n \\`\\`\\`\n ${failures.join('\\n')}\n \n Error Details:\n ${errorTraces.map(trace => trace.trim()).join('\\n')}\n \\`\\`\\`\n </details>\n `;\n}\n\nconst output = `### Test Results ${color}\n\n**Status**: ${testStatus}\n**Coverage**: ${coverage}\n**OS**: \\`${{ runner.os }}\\`\n\n${failureDetails}\n\n<details>\n<summary>Test Details</summary>\n\n* Triggered by: @${{ github.actor }}\n* Commit: ${{ github.sha }}\n* Branch: ${{ github.ref }}\n* Workflow: ${{ github.workflow }}\n</details>`;\n\n// Find existing comment\nconst { data: comments } = await github.rest.issues.listComments({\n owner: context.repo.owner,\n repo: context.repo.repo,\n issue_number: context.issue.number,\n});\n\nconst botComment = comments.find(comment => \n comment.user.type === 'Bot' && \n comment.body.includes('### Test Results')\n);\n\nif (botComment) {\n // Update existing comment\n await github.rest.issues.updateComment({\n owner: context.repo.owner,\n repo: context.repo.repo,\n comment_id: botComment.id,\n body: output\n });\n} else {\n // Create new comment\n await github.rest.issues.createComment({\n owner: context.repo.owner,\n repo: context.repo.repo,\n issue_number: context.issue.number,\n body: output\n });\n}\n"
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
name: Test Frontend
on:
push:
branches: ['main', 'staging', 'prod']
Expand All @@ -10,13 +9,11 @@ on:
- 'frontend/**'
jobs:
test-frontend:
name: Test Frontend
runs-on: ubuntu-latest
defaults:
run:
shell: bash
working-directory: frontend
steps:
- uses: actions/checkout@v4
- name: Checkout code
uses: actions/checkout@v4
- name: Setup pnpm
uses: pnpm/action-setup@v4
with:
Expand All @@ -26,16 +23,14 @@ jobs:
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'pnpm'
- name: Install dependencies
run: pnpm install --frozen-lockfile
run: cd frontend && pnpm install --frozen-lockfile
- name: Run tests
run: pnpm test:ci
run: cd frontend && pnpm test:ci
- name: Generate coverage report
run: pnpm coverage
run: cd frontend && pnpm coverage
- name: Upload coverage report
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coverage/
retention-days: 7
name: coverage-report-frontend
path: frontend/coverage/
5 changes: 4 additions & 1 deletion backend/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,7 @@ tmp

*.pem

static
static

# ignore test coverage
coverage.out
2 changes: 1 addition & 1 deletion backend/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ start-testdb:
@goose -dir .sqlc/migrations postgres "$(TEST_DB_URL)" up

run-tests:
@go test -v ./...
@go test -v -coverprofile=coverage.out ./...

stop-testdb:
@echo "Stopping test db..."
Expand Down
10 changes: 5 additions & 5 deletions backend/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ Make sure to download **VERSION 1.23** for best compatibility.

### Install Pre-requisite tools

- Air (auto-reload backend): go install github.com/air-verse/air@latest
- SQLc (generate type-safe code from SQL queries): go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
- Goose (SQL migration management tool): go install github.com/pressly/goose/v3/cmd/goose@latest
- Air (auto-reload backend): go install github.com/air-verse/air@1.61.1
- SQLc (generate type-safe code from SQL queries): go install github.com/sqlc-dev/sqlc/cmd/sqlc@1.27.0
- Goose (SQL migration management tool): go install github.com/pressly/goose/v3/cmd/goose@3.22.1
- Make
- Docker

Expand All @@ -22,8 +22,8 @@ Make sure to download **VERSION 1.23** for best compatibility.
1. Create a new PostgreSQL instance using docker with `make init-dev-db`
2. Start PostgreSQL for development `make start-dev-db`
- Check health of DB `make health-dev-db`
4. Run migrations when ready `make up`
5. Start development server `make dev`
3. Run migrations when ready `make up`
4. Start development server `make dev`

> Use `make query "SELECT ... FROM ..."` for quick query on the terminal.
> You should also checkout the other available commands in the Makefile.
2 changes: 1 addition & 1 deletion frontend/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React + TS</title>
<title>SPUR</title>
</head>
<body>
<div id="root"></div>
Expand Down

0 comments on commit 942438d

Please sign in to comment.