66fc2386c2
prisma.ts throws at import time if DATABASE_URL is not set. The env var was only set on the 'Generate Prisma client' step, not 'Run unit tests'.
170 lines
5.1 KiB
YAML
170 lines
5.1 KiB
YAML
name: Pull Request
|
|
|
|
on:
|
|
pull_request:
|
|
branches:
|
|
- main
|
|
|
|
env:
|
|
REGISTRY: docker.notsosm.art
|
|
IMAGE_NAME: euchre-camp
|
|
|
|
jobs:
|
|
unit-tests:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: docker.notsosm.art/euchre-camp/ci-base:latest
|
|
options: --user root
|
|
env:
|
|
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: bun install
|
|
|
|
- name: Generate Prisma client
|
|
run: bun x prisma generate
|
|
|
|
- name: Run unit tests
|
|
run: bun test src/__tests__/unit/ src/__tests__/*.test.tsx src/__tests__/auth-simple.test.ts
|
|
|
|
build-and-deploy-ci:
|
|
runs-on: ubuntu-latest
|
|
needs: unit-tests
|
|
container:
|
|
image: docker.notsosm.art/euchre-camp/ci-base:latest
|
|
options: --user root
|
|
volumes:
|
|
- /apps:/apps
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Install dependencies
|
|
run: bun install
|
|
|
|
- name: Generate Prisma client
|
|
run: bun x prisma generate
|
|
env:
|
|
DATABASE_URL: postgresql://user:pass@localhost:5432/dummy
|
|
|
|
- name: Extract PR number and commit info
|
|
id: info
|
|
run: |
|
|
echo "pr_number=$(echo $GITHUB_REF | grep -oP 'refs/pull/\K[0-9]+')" >> $GITHUB_OUTPUT
|
|
echo "short_sha=$(echo $GITHUB_SHA | cut -c1-7)" >> $GITHUB_OUTPUT
|
|
|
|
- name: Build Docker image for PR
|
|
run: |
|
|
IMAGE_TAG="pr-${{ steps.info.outputs.pr_number }}-${{ steps.info.outputs.short_sha }}"
|
|
docker build \
|
|
--target runner \
|
|
--build-arg GIT_COMMIT=$GITHUB_SHA \
|
|
-t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${IMAGE_TAG} \
|
|
.
|
|
|
|
- name: Update CI site compose and restart
|
|
run: |
|
|
IMAGE_TAG="pr-${{ steps.info.outputs.pr_number }}-${{ steps.info.outputs.short_sha }}"
|
|
COMPOSE_FILE="/apps/euchre_camp_ci/docker-compose.yml"
|
|
|
|
# Update the image tag in the compose file
|
|
sed -i "s|image: docker.notsosm.art/euchre-camp:[a-zA-Z0-9.-]*|image: docker.notsosm.art/euchre-camp:${IMAGE_TAG}|" ${COMPOSE_FILE}
|
|
|
|
# Pull the new image and restart the CI stack
|
|
cd /apps/euchre_camp_ci
|
|
docker compose pull app
|
|
docker compose up -d app
|
|
|
|
- name: Wait for CI site to be healthy
|
|
run: |
|
|
for i in {1..30}; do
|
|
if curl -sf https://euchre-ci.notsosm.art/api/health > /dev/null 2>&1; then
|
|
echo "CI site is healthy"
|
|
exit 0
|
|
fi
|
|
sleep 0.5
|
|
done
|
|
echo "CI site failed to become healthy after 15 seconds"
|
|
docker compose -f /apps/euchre_camp_ci/docker-compose.yml logs app
|
|
exit 1
|
|
|
|
- name: Run acceptance tests
|
|
run: DATABASE_URL="${{ secrets.CI_DATABASE_URL }}" bun test:acceptance
|
|
env:
|
|
CI: true
|
|
|
|
- name: Cleanup PR images
|
|
if: always()
|
|
run: |
|
|
docker rmi ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:pr-${{ steps.info.outputs.pr_number }}-${{ steps.info.outputs.short_sha }} || true
|
|
|
|
analyze-bump-type:
|
|
runs-on: ubuntu-latest
|
|
needs: unit-tests
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Analyze commits for bump type
|
|
id: bump_type
|
|
run: |
|
|
# Get the merge base and PR commits
|
|
git fetch origin main:main 2>/dev/null || true
|
|
MERGE_BASE=$(git merge-base HEAD main 2>/dev/null || echo "HEAD~1")
|
|
|
|
# Analyze commits in this PR
|
|
COMMITS=$(git log --oneline ${MERGE_BASE}..HEAD 2>/dev/null || git log --oneline -10)
|
|
|
|
echo "Commits in this PR:"
|
|
echo "$COMMITS"
|
|
echo ""
|
|
|
|
# Determine bump type
|
|
if echo "$COMMITS" | grep -qE "(BREAKING CHANGE|!:)"; then
|
|
BUMP="major"
|
|
REASON="Breaking change detected in commit messages"
|
|
elif echo "$COMMITS" | grep -qE "^feat"; then
|
|
BUMP="minor"
|
|
REASON="Feature commits detected"
|
|
else
|
|
BUMP="patch"
|
|
REASON="Defaulting to patch (fixes or other changes)"
|
|
fi
|
|
|
|
echo "Suggested bump type: $BUMP"
|
|
echo "Reason: $REASON"
|
|
echo "bump=$BUMP" >> $GITHUB_OUTPUT
|
|
echo "reason=$REASON" >> $GITHUB_OUTPUT
|
|
|
|
- name: Comment bump type on PR
|
|
uses: actions/github-script@v7
|
|
with:
|
|
script: |
|
|
const bump = '${{ steps.bump_type.outputs.bump }}';
|
|
const reason = '${{ steps.bump_type.outputs.reason }}';
|
|
|
|
const comment = `
|
|
## 🏷️ Version Bump Analysis
|
|
|
|
**Suggested bump type:** \`${bump.toUpperCase()}\`
|
|
**Reason:** ${reason}
|
|
|
|
This PR will bump the version to the next ${bump} version when merged.
|
|
`;
|
|
|
|
github.rest.issues.createComment({
|
|
issue_number: context.issue.number,
|
|
owner: context.repo.owner,
|
|
repo: context.repo.repo,
|
|
body: comment
|
|
});
|