name: CI on: push: branches: [master] tags: ["v*"] env: IMAGE_BACKEND: ${{ secrets.REGISTRY_HOST }}/domagoj/otel-bi-backend IMAGE_FRONTEND: ${{ secrets.REGISTRY_HOST }}/domagoj/otel-bi-frontend jobs: test: runs-on: ubuntu-latest container: rockylinux/rockylinux:10 defaults: run: working-directory: backend steps: - name: Install system packages working-directory: / run: dnf install -y git python3 curl && dnf clean all - name: Checkout working-directory: / env: TOKEN: ${{ github.token }} run: | git config --global credential.helper \ '!f() { printf "username=x-access-token\npassword=%s\n" "$TOKEN"; }; f' git init "$GITHUB_WORKSPACE" git -C "$GITHUB_WORKSPACE" remote add origin \ "${{ github.server_url }}/${{ github.repository }}.git" git -C "$GITHUB_WORKSPACE" fetch --depth=1 origin "${{ github.sha }}" git -C "$GITHUB_WORKSPACE" checkout FETCH_HEAD - name: Install uv working-directory: / run: | curl -LsSf https://astral.sh/uv/install.sh | sh echo "$HOME/.local/bin" >> "$GITHUB_PATH" - name: Install dependencies run: uv sync --no-dev - name: Run tests run: uv run pytest tests/ -q test-analytics: runs-on: ubuntu-latest container: rockylinux/rockylinux:10 defaults: run: working-directory: backend/analytics steps: - name: Install system packages working-directory: / run: dnf install -y git golang && dnf clean all - name: Checkout working-directory: / env: TOKEN: ${{ github.token }} run: | git config --global credential.helper \ '!f() { printf "username=x-access-token\npassword=%s\n" "$TOKEN"; }; f' git init "$GITHUB_WORKSPACE" git -C "$GITHUB_WORKSPACE" remote add origin \ "${{ github.server_url }}/${{ github.repository }}.git" git -C "$GITHUB_WORKSPACE" fetch --depth=1 origin "${{ github.sha }}" git -C "$GITHUB_WORKSPACE" checkout FETCH_HEAD - name: Vet run: go vet ./... - name: Test run: go test ./... build-backend: needs: [test, test-analytics] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: docker/login-action@v3 with: registry: ${{ secrets.REGISTRY_HOST }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_TOKEN }} - uses: docker/setup-buildx-action@v3 - uses: docker/build-push-action@v6 with: context: backend file: backend/Dockerfile push: true cache-from: type=registry,ref=${{ env.IMAGE_BACKEND }}:latest cache-to: type=inline tags: | ${{ env.IMAGE_BACKEND }}:${{ github.sha }} ${{ env.IMAGE_BACKEND }}:latest build-frontend: needs: test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: docker/login-action@v3 with: registry: ${{ secrets.REGISTRY_HOST }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_TOKEN }} - uses: docker/setup-buildx-action@v3 - uses: docker/build-push-action@v6 with: context: frontend file: frontend/Dockerfile push: true cache-from: type=registry,ref=${{ env.IMAGE_FRONTEND }}:latest cache-to: type=inline build-args: | VITE_API_BASE_URL=${{ vars.API_BASE_URL }} VITE_OTEL_COLLECTOR_ENDPOINT=${{ vars.OTEL_COLLECTOR_ENDPOINT }} tags: | ${{ env.IMAGE_FRONTEND }}:${{ github.sha }} ${{ env.IMAGE_FRONTEND }}:latest