name: CI - Lint, Test & Coverage on: push: branches: [ main, development, 'feature/**' ] pull_request: branches: [ main, development ] jobs: backend-lint: name: Backend - Go Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: golangci-lint uses: golangci/golangci-lint-action@v6 with: version: latest working-directory: backend backend-test: name: Backend - Go Tests runs-on: ubuntu-latest needs: [backend-lint] steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v5 with: go-version: '1.22' - name: Cache Go modules uses: actions/cache@v4 with: path: ~/go/pkg/mod # Use the backend module's go.sum for cache key so the cache # restores correctly when modules change. key: ${{ runner.os }}-go-${{ hashFiles('backend/go.sum') }} restore-keys: | ${{ runner.os }}-go- - name: Run tests working-directory: backend run: go test -v -race -coverprofile=coverage.out ./... - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 with: file: backend/coverage.out flags: backend env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} frontend-lint: name: Frontend - ESLint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node uses: actions/setup-node@v4 with: node-version: '20' - name: Cache node modules uses: actions/cache@v4 with: path: frontend/node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies working-directory: frontend run: npm ci - name: Run ESLint working-directory: frontend run: npm run lint frontend-build: name: Frontend - Build runs-on: ubuntu-latest needs: [frontend-lint] steps: - uses: actions/checkout@v4 - name: Set up Node uses: actions/setup-node@v4 with: node-version: '20' - name: Cache node modules uses: actions/cache@v4 with: path: frontend/node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node- - name: Install dependencies working-directory: frontend run: npm ci - name: Build frontend working-directory: frontend run: npm run build