turash/.gitea/workflows/ci.yml
Damir Mukimov df2ce48c9e
Some checks failed
CI/CD Pipeline / frontend-lint (push) Successful in 1m37s
CI/CD Pipeline / frontend-build (push) Failing after 39s
CI/CD Pipeline / backend-lint (push) Failing after 5m43s
CI/CD Pipeline / backend-build (push) Has been skipped
CI/CD Pipeline / e2e-test (push) Has been skipped
Enhance CI workflow for PostgreSQL service readiness checks
- Add health check command for PostgreSQL service to ensure proper initialization
- Update waiting mechanism to use built-in TCP checks for improved reliability
- Modify output messages for clarity and include warnings for potential test failures
2025-12-26 13:43:38 +01:00

299 lines
10 KiB
YAML

name: CI/CD Pipeline
on:
push:
branches:
- master
paths:
- 'bugulma/**'
- 'k8s/**'
- '.gitea/workflows/**'
pull_request:
branches:
- master
paths:
- 'bugulma/**'
- 'k8s/**'
jobs:
frontend-lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Enable Corepack (for Yarn)
run: corepack enable
- name: Install dependencies
working-directory: bugulma/frontend
run: yarn install --immutable
- name: Lint
working-directory: bugulma/frontend
run: yarn lint
- name: Test
working-directory: bugulma/frontend
run: yarn test --run
frontend-build:
runs-on: ubuntu-latest
needs: frontend-lint
if: gitea.event_name == 'push' && gitea.ref == 'refs/heads/master'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: |
image=moby/buildkit:latest
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: registry.bk.glpx.pro
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push frontend
uses: docker/build-push-action@v5
with:
context: bugulma/frontend
file: bugulma/frontend/Dockerfile
push: true
tags: |
registry.bk.glpx.pro/turash/turash-frontend:latest
registry.bk.glpx.pro/turash/turash-frontend:${{ gitea.sha }}
cache-from: type=registry,ref=registry.bk.glpx.pro/turash/turash-frontend:buildcache
cache-to: type=registry,ref=registry.bk.glpx.pro/turash/turash-frontend:buildcache,mode=max
platforms: linux/amd64
build-args: |
BUILDKIT_INLINE_CACHE=1
backend-lint:
runs-on: ubuntu-latest
services:
postgres:
image: postgis/postgis:16-3.4
env:
POSTGRES_USER: turash
POSTGRES_PASSWORD: turash123
POSTGRES_DB: postgres
ports:
- 5432:5432
options: >-
--health-cmd "pg_isready -U turash"
--health-interval 10s
--health-timeout 5s
--health-retries 5
env:
POSTGRES_HOST: localhost
POSTGRES_PORT: 5432
POSTGRES_USER: turash
POSTGRES_PASSWORD: turash123
POSTGRES_DB: postgres
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.25.3'
cache: true
- name: Install CGO dependencies (for race detector)
id: cgo-setup
run: |
echo "Checking for gcc (required for race detector)..."
CGO_AVAILABLE=0
# Check if gcc is already available
if command -v gcc &> /dev/null; then
echo "✓ gcc is already available"
gcc --version
CGO_AVAILABLE=1
else
echo "gcc not found, attempting to install..."
# Detect package manager and install gcc
if command -v apt-get &> /dev/null; then
echo "Using apt-get (Debian/Ubuntu)..."
if [ "$(id -u)" -eq 0 ]; then
apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential && CGO_AVAILABLE=1 || true
else
(sudo apt-get update -qq && DEBIAN_FRONTEND=noninteractive sudo apt-get install -y -qq build-essential && CGO_AVAILABLE=1) || \
(apt-get update -qq && DEBIAN_FRONTEND=noninteractive apt-get install -y -qq build-essential && CGO_AVAILABLE=1) || true
fi
elif command -v apk &> /dev/null; then
echo "Using apk (Alpine)..."
apk add --no-cache gcc musl-dev && CGO_AVAILABLE=1 || true
elif command -v yum &> /dev/null; then
echo "Using yum (RHEL/CentOS)..."
yum install -y gcc && CGO_AVAILABLE=1 || true
elif command -v dnf &> /dev/null; then
echo "Using dnf (Fedora)..."
dnf install -y gcc && CGO_AVAILABLE=1 || true
else
echo "⚠ No supported package manager found (apt-get, apk, yum, dnf)"
echo "⚠ gcc installation skipped - race detector will be disabled"
fi
# Verify installation
if command -v gcc &> /dev/null || [ -f /usr/bin/gcc ]; then
echo "✓ gcc successfully installed"
gcc --version || /usr/bin/gcc --version
CGO_AVAILABLE=1
else
echo "⚠ gcc installation failed - race detector will be disabled"
fi
fi
echo "cgo_available=$CGO_AVAILABLE" >> $GITHUB_OUTPUT
continue-on-error: true
- name: Install dependencies
working-directory: bugulma/backend
run: go mod download
env:
GO111MODULE: on
CGO_ENABLED: 1
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Tidy and verify modules
working-directory: bugulma/backend
run: |
go mod tidy
go mod verify
env:
GO111MODULE: on
CGO_ENABLED: 0
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Verify module setup
working-directory: bugulma/backend
run: |
pwd
ls -la go.mod
go list -m
# Verify all packages can be listed
go list ./...
env:
GO111MODULE: on
CGO_ENABLED: 0
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Build module to populate cache
working-directory: bugulma/backend
run: go build ./...
env:
GO111MODULE: on
CGO_ENABLED: 0
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Vet
working-directory: bugulma/backend
run: go vet ./...
env:
GO111MODULE: on
CGO_ENABLED: 0
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Wait for PostgreSQL to be ready
run: |
echo "Waiting for PostgreSQL to be ready..."
# Use bash built-in TCP check (works without external tools)
for i in {1..60}; do
# Check if port 5432 is open using bash built-in /dev/tcp
if timeout 1 bash -c "echo > /dev/tcp/localhost/5432" 2>/dev/null; then
echo "PostgreSQL port is accessible!"
# Give it a moment to fully initialize
sleep 3
echo "PostgreSQL is ready!"
exit 0
fi
# Alternative: try with cat if timeout not available
if bash -c "cat < /dev/null > /dev/tcp/localhost/5432" 2>/dev/null; then
echo "PostgreSQL port is accessible (via cat)!"
sleep 3
echo "PostgreSQL is ready!"
exit 0
fi
echo "Waiting for PostgreSQL... (attempt $i/60)"
sleep 2
done
echo "⚠ PostgreSQL did not become ready in time"
echo "This may be expected if services are not fully supported in this Gitea Actions version"
echo "Tests will continue but may fail if PostgreSQL is required"
continue-on-error: true
- name: Test
working-directory: bugulma/backend
run: |
# Check if CGO is available for race detector
CGO_AVAILABLE="${{ steps.cgo-setup.outputs.cgo_available || '0' }}"
if [ "$CGO_AVAILABLE" = "1" ] && command -v gcc &> /dev/null; then
echo "Running tests with race detector..."
CGO_ENABLED=1 go test -v -race -coverprofile=coverage.out ./...
else
echo "Running tests without race detector (CGO not available)..."
CGO_ENABLED=0 go test -v -coverprofile=coverage.out ./...
fi
env:
GO111MODULE: on
GOPROXY: https://proxy.golang.org,direct
GOSUMDB: sum.golang.org
- name: Coverage
working-directory: bugulma/backend
run: go tool cover -html=coverage.out -o coverage.html
backend-build:
runs-on: ubuntu-latest
needs: backend-lint
if: gitea.event_name == 'push' && gitea.ref == 'refs/heads/master'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
with:
driver-opts: |
image=moby/buildkit:latest
- name: Login to Container Registry
uses: docker/login-action@v3
with:
registry: registry.bk.glpx.pro
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push backend
uses: docker/build-push-action@v5
with:
context: bugulma/backend
file: bugulma/backend/Dockerfile
push: true
tags: |
registry.bk.glpx.pro/turash/turash-backend:latest
registry.bk.glpx.pro/turash/turash-backend:${{ gitea.sha }}
cache-from: type=registry,ref=registry.bk.glpx.pro/turash/turash-backend:buildcache
cache-to: type=registry,ref=registry.bk.glpx.pro/turash/turash-backend:buildcache,mode=max
platforms: linux/amd64
build-args: |
BUILDKIT_INLINE_CACHE=1
e2e-test:
runs-on: ubuntu-latest
needs: [frontend-build, backend-build]
if: gitea.event_name == 'push' && gitea.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '24'
- name: Enable Corepack (for Yarn)
run: corepack enable
- name: Install dependencies
working-directory: bugulma/frontend
run: yarn install --immutable
- name: Run E2E tests
working-directory: bugulma/frontend
run: yarn test:e2e --headed=false