diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 25d55a6032..a767f0e6f5 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -15,82 +15,137 @@ env: GOPROXY: https://proxy.golang.org,direct GOPRIVATE: git.marketally.com GONOSUMDB: git.marketally.com - GO_VERSION: "1.25" + GO_VERSION: "1.24" NODE_VERSION: "22" jobs: - # Lint and test job - lint-test: - name: Lint and Test + # Lint job - must pass + lint: + name: Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Check for existing Go - id: go-check - run: | - if command -v go &> /dev/null; then - GO_VER=$(go version | grep -oP 'go\d+\.\d+' | head -1) - echo "version=$GO_VER" >> $GITHUB_OUTPUT - echo "Found Go: $(go version)" - fi - name: Setup Go - if: steps.go-check.outputs.version == '' uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: false - - name: Check for existing Node.js - id: node-check - run: | - if command -v node &> /dev/null; then - NODE_VER=$(node --version) - echo "version=$NODE_VER" >> $GITHUB_OUTPUT - echo "Found Node.js: $NODE_VER" - fi - - name: Setup Node.js - if: steps.node-check.outputs.version == '' uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - - name: Check for existing pnpm - id: pnpm-check - run: | - if command -v pnpm &> /dev/null; then - PNPM_VER=$(pnpm --version) - echo "version=$PNPM_VER" >> $GITHUB_OUTPUT - echo "Found pnpm: $PNPM_VER" - fi - - name: Install pnpm - if: steps.pnpm-check.outputs.version == '' run: npm install -g pnpm - name: Install dependencies run: make deps-frontend deps-backend - - name: Run linters - run: make lint-go lint-frontend + - name: Run Go linter + run: make lint-go + + - name: Run frontend linter + run: make lint-frontend continue-on-error: true - - name: Run tests - run: make test + # Unit tests with SQLite (no external database needed) + test-unit: + name: Unit Tests + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache: false + + - name: Install dependencies + run: go mod download + + - name: Run unit tests + run: | + go test -tags="sqlite sqlite_unlock_notify" -race -v \ + ./modules/... \ + ./services/... + env: + GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: true + + # Integration tests with PostgreSQL + test-pgsql: + name: Integration Tests (PostgreSQL) + runs-on: ubuntu-latest + services: + pgsql: + image: postgres:15 + env: + POSTGRES_DB: testgitea + POSTGRES_USER: postgres + POSTGRES_PASSWORD: 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: Setup Go + uses: actions/setup-go@v5 + with: + go-version: ${{ env.GO_VERSION }} + cache: false + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + + - name: Install pnpm + run: npm install -g pnpm + + - name: Install dependencies + run: make deps-frontend deps-backend + + - name: Build test binary + run: | + go build -tags="bindata sqlite sqlite_unlock_notify" -o gitea . + + - name: Generate test config + run: | + make generate-ini-pgsql + env: + TEST_PGSQL_HOST: localhost:5432 + TEST_PGSQL_DBNAME: testgitea + TEST_PGSQL_USERNAME: postgres + TEST_PGSQL_PASSWORD: postgres + TEST_PGSQL_SCHEMA: gtestschema + + - name: Run PostgreSQL integration tests + run: | + make test-pgsql continue-on-error: true env: + TEST_PGSQL_HOST: localhost:5432 + TEST_PGSQL_DBNAME: testgitea + TEST_PGSQL_USERNAME: postgres + TEST_PGSQL_PASSWORD: postgres + TEST_PGSQL_SCHEMA: gtestschema GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: true # Build job for binaries build: name: Build Binaries runs-on: ubuntu-latest - needs: lint-test + needs: [lint] strategy: matrix: include: @@ -110,48 +165,18 @@ jobs: with: fetch-depth: 0 - - name: Check for existing Go - id: go-check - run: | - if command -v go &> /dev/null; then - GO_VER=$(go version | grep -oP 'go\d+\.\d+' | head -1) - echo "version=$GO_VER" >> $GITHUB_OUTPUT - echo "Found Go: $(go version)" - fi - - name: Setup Go - if: steps.go-check.outputs.version == '' uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: false - - name: Check for existing Node.js - id: node-check - run: | - if command -v node &> /dev/null; then - NODE_VER=$(node --version) - echo "version=$NODE_VER" >> $GITHUB_OUTPUT - echo "Found Node.js: $NODE_VER" - fi - - name: Setup Node.js - if: steps.node-check.outputs.version == '' uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - - name: Check for existing pnpm - id: pnpm-check - run: | - if command -v pnpm &> /dev/null; then - PNPM_VER=$(pnpm --version) - echo "version=$PNPM_VER" >> $GITHUB_OUTPUT - echo "Found pnpm: $PNPM_VER" - fi - - name: Install pnpm - if: steps.pnpm-check.outputs.version == '' run: npm install -g pnpm - name: Install dependencies @@ -206,7 +231,7 @@ jobs: RESPONSE=$(curl -s -X POST \ -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ -H "Content-Type: application/json" \ - -d '{"tag_name":"'"$TAG"'","name":"Gitea '"$TAG"'","body":"Official release.","draft":false,"prerelease":false}' \ + -d '{"tag_name":"'"$TAG"'","name":"GitCaddy '"$TAG"'","body":"Official release.","draft":false,"prerelease":false}' \ "${{ github.server_url }}/api/v1/repos/${{ github.repository }}/releases") RELEASE_ID=$(echo "$RESPONSE" | grep -o '"id":[0-9]*' | head -1 | cut -d: -f2) echo "Created release: $RELEASE_ID" diff --git a/.gitea/workflows/pr-checks.yml b/.gitea/workflows/pr-checks.yml index 069600b8af..57924a2617 100644 --- a/.gitea/workflows/pr-checks.yml +++ b/.gitea/workflows/pr-checks.yml @@ -10,60 +10,30 @@ env: GOPROXY: https://proxy.golang.org,direct GOPRIVATE: git.marketally.com GONOSUMDB: git.marketally.com - GO_VERSION: "1.25" + GO_VERSION: "1.24" NODE_VERSION: "22" jobs: - # Quick checks for PRs - checks: - name: Code Quality Checks + # Quick lint checks - must pass + lint: + name: Lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - - name: Check for existing Go - id: go-check - run: | - if command -v go &> /dev/null; then - GO_VER=$(go version | grep -oP 'go\d+\.\d+' | head -1) - echo "version=$GO_VER" >> $GITHUB_OUTPUT - echo "Found Go: $(go version)" - fi - - name: Setup Go - if: steps.go-check.outputs.version == '' uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: false - - name: Check for existing Node.js - id: node-check - run: | - if command -v node &> /dev/null; then - NODE_VER=$(node --version) - echo "version=$NODE_VER" >> $GITHUB_OUTPUT - echo "Found Node.js: $NODE_VER" - fi - - name: Setup Node.js - if: steps.node-check.outputs.version == '' uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - - name: Check for existing pnpm - id: pnpm-check - run: | - if command -v pnpm &> /dev/null; then - PNPM_VER=$(pnpm --version) - echo "version=$PNPM_VER" >> $GITHUB_OUTPUT - echo "Found pnpm: $PNPM_VER" - fi - - name: Install pnpm - if: steps.pnpm-check.outputs.version == '' run: npm install -g pnpm - name: Install Go dependencies @@ -80,44 +50,37 @@ jobs: - name: Go vet run: go vet ./... + - name: Go linter + run: | + go run github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.7.2 run + - name: Check for build errors run: go build -v ./... # Unit tests - unit-tests: + test-unit: name: Unit Tests runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - - name: Check for existing Go - id: go-check - run: | - if command -v go &> /dev/null; then - GO_VER=$(go version | grep -oP 'go\d+\.\d+' | head -1) - echo "version=$GO_VER" >> $GITHUB_OUTPUT - echo "Found Go: $(go version)" - fi - - name: Setup Go - if: steps.go-check.outputs.version == '' uses: actions/setup-go@v5 with: go-version: ${{ env.GO_VERSION }} cache: false + - name: Install dependencies + run: go mod download + - name: Run unit tests run: | - go test -v -race -coverprofile=coverage.out ./... - continue-on-error: true - - - name: Upload coverage - uses: actions/upload-artifact@v3 - with: - name: coverage - path: coverage.out - retention-days: 7 + go test -tags="sqlite sqlite_unlock_notify" -race \ + ./modules/... \ + ./services/... + env: + GITEA_I_AM_BEING_UNSAFE_RUNNING_AS_ROOT: true # Frontend checks frontend: @@ -127,32 +90,12 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - - name: Check for existing Node.js - id: node-check - run: | - if command -v node &> /dev/null; then - NODE_VER=$(node --version) - echo "version=$NODE_VER" >> $GITHUB_OUTPUT - echo "Found Node.js: $NODE_VER" - fi - - name: Setup Node.js - if: steps.node-check.outputs.version == '' uses: actions/setup-node@v4 with: node-version: ${{ env.NODE_VERSION }} - - name: Check for existing pnpm - id: pnpm-check - run: | - if command -v pnpm &> /dev/null; then - PNPM_VER=$(pnpm --version) - echo "version=$PNPM_VER" >> $GITHUB_OUTPUT - echo "Found pnpm: $PNPM_VER" - fi - - name: Install pnpm - if: steps.pnpm-check.outputs.version == '' run: npm install -g pnpm - name: Install dependencies