diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..d2612cf5 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,49 @@ +name: Run Tests + +on: + pull_request: + branches: + - main + - dev + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Copy config file + run: cp config/config.example.yml config/config.yml + + - name: Install dependencies + run: npm ci + + - name: Generate database migrations + run: npm run db:sqlite:generate + + - name: Apply database migrations + run: npm run db:sqlite:push + + - name: Start app in background + run: nohup npm run dev & + + - name: Wait for app availability + run: | + for i in {1..5}; do + if curl --silent --fail http://localhost:3002/auth/login; then + echo "App is up" + exit 0 + fi + echo "Waiting for the app... attempt $i" + sleep 5 + done + echo "App failed to start" + exit 1 + + - name: Build Docker image + run: make build diff --git a/Dockerfile b/Dockerfile index adfe2597..8a954585 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,8 +3,8 @@ FROM node:20-alpine AS builder WORKDIR /app # COPY package.json package-lock.json ./ -COPY package.json ./ -RUN npm install +COPY package*.json ./ +RUN npm ci COPY . . @@ -22,8 +22,8 @@ WORKDIR /app RUN apk add --no-cache curl # COPY package.json package-lock.json ./ -COPY package.json ./ -RUN npm install --only=production && npm cache clean --force +COPY package*.json ./ +RUN npm ci --omit=dev && npm cache clean --force COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static diff --git a/Dockerfile.pg b/Dockerfile.pg index 58c54d8c..46bd7180 100644 --- a/Dockerfile.pg +++ b/Dockerfile.pg @@ -3,8 +3,8 @@ FROM node:20-alpine AS builder WORKDIR /app # COPY package.json package-lock.json ./ -COPY package.json ./ -RUN npm install +COPY package*.json ./ +RUN npm ci COPY . . @@ -22,8 +22,8 @@ WORKDIR /app RUN apk add --no-cache curl # COPY package.json package-lock.json ./ -COPY package.json ./ -RUN npm install --only=production && npm cache clean --force +COPY package*.json ./ +RUN npm ci --omit=dev && npm cache clean --force COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static diff --git a/Makefile b/Makefile index fdf5daa1..c2c01b9a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,8 @@ +.PHONY: build build-release build-arm build-x86 test clean + build-release: @if [ -z "$(tag)" ]; then \ - echo "Error: tag is required. Usage: make build-all tag="; \ + echo "Error: tag is required. Usage: make build-release tag="; \ exit 1; \ fi docker buildx build --platform linux/arm64,linux/amd64 -t fosrl/pangolin:latest -f Dockerfile --push .