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: - uses: actions/checkout@v4 - name: Build and push frontend with Kaniko uses: aevea/action-kaniko@v0.9.0 with: registry: registry.bk.glpx.pro username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} image: turash/turash-frontend tag: latest,${{ gitea.sha }} cache: true cache_registry: registry.bk.glpx.pro/turash/turash-frontend context: bugulma/frontend dockerfile: bugulma/frontend/Dockerfile kaniko_executor_image: gcr.io/kaniko-project/executor:debug-v1.24.0 backend-lint: runs-on: ubuntu-latest 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 run: | set -e echo "Checking for gcc..." # Check if gcc is available if command -v gcc &> /dev/null; then echo "✓ gcc is already available" gcc --version else echo "gcc not found, installing build-essential..." # Install build-essential which includes gcc # Check if we're root (common in CI environments) if [ "$(id -u)" -eq 0 ]; then echo "Running as root, installing directly..." apt-get update DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential else echo "Not root, trying with sudo..." sudo apt-get update || apt-get update DEBIAN_FRONTEND=noninteractive sudo apt-get install -y build-essential || \ DEBIAN_FRONTEND=noninteractive apt-get install -y build-essential fi # Verify installation - check common locations if command -v gcc &> /dev/null; then echo "✓ gcc successfully installed" gcc --version elif [ -f /usr/bin/gcc ]; then echo "✓ gcc found at /usr/bin/gcc" /usr/bin/gcc --version export PATH="/usr/bin:$PATH" else echo "✗ gcc installation verification failed" echo "PATH: $PATH" echo "Searching for gcc..." find /usr -name gcc 2>/dev/null | head -5 || echo "gcc not found in /usr" exit 1 fi fi # Final verification echo "Final gcc check:" gcc --version || /usr/bin/gcc --version || (echo "ERROR: gcc still not found" && exit 1) - 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: Test working-directory: bugulma/backend run: go test -v -race -coverprofile=coverage.out ./... env: GO111MODULE: on CGO_ENABLED: 1 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: - uses: actions/checkout@v4 - name: Build and push backend with Kaniko uses: aevea/action-kaniko@v0.9.0 with: registry: registry.bk.glpx.pro username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} image: turash/turash-backend tag: latest,${{ gitea.sha }} cache: true cache_registry: registry.bk.glpx.pro/turash/turash-backend context: bugulma/backend dockerfile: bugulma/backend/Dockerfile kaniko_executor_image: gcr.io/kaniko-project/executor:debug-v1.24.0 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