diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index 2dcd162..eb1c8dc 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -2,13 +2,37 @@ name: Docker Build and Push on: push: - branches: - - main + tags: + - 'v*' jobs: - build-and-push-branches: + test: + name: Run Tests runs-on: ubuntu-latest - if: github.ref_type == 'branch' + + steps: + - name: Checkout repository + uses: actions/checkout@v6 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: 'stable' + cache: false + + - name: Install dependencies + run: go mod download + + - name: Run go vet + run: go vet ./... + + - name: Run tests + run: go test -v -p 4 ./... + + build-and-push: + name: Build and Push Docker Image + runs-on: ubuntu-latest + needs: test steps: - name: Checkout repository @@ -17,64 +41,7 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Log in to Docker Hub - uses: docker/login-action@v3 - with: - registry: git.fossy.my.id - username: ${{ secrets.DOCKER_USERNAME }} - password: ${{ secrets.DOCKER_PASSWORD }} - - - name: Set version variables - id: vars - run: | - if [ "${{ github.ref }}" == "refs/heads/main" ]; then - echo "VERSION=dev-main" >> $GITHUB_OUTPUT - else - echo "VERSION=dev-staging" >> $GITHUB_OUTPUT - fi - echo "BUILD_DATE=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT - echo "COMMIT=${{ github.sha }}" >> $GITHUB_OUTPUT - - - name: Build and push Docker image for main - uses: docker/build-push-action@v6 - with: - context: . - push: true - tags: | - git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:latest - platforms: linux/amd64,linux/arm64 - build-args: | - VERSION=${{ steps.vars.outputs.VERSION }} - BUILD_DATE=${{ steps.vars.outputs.BUILD_DATE }} - COMMIT=${{ steps.vars.outputs.COMMIT }} - if: github.ref == 'refs/heads/main' - - - name: Build and push Docker image for staging - uses: docker/build-push-action@v6 - with: - context: . - push: true - tags: | - git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:staging - platforms: linux/amd64,linux/arm64 - build-args: | - VERSION=${{ steps.vars.outputs.VERSION }} - BUILD_DATE=${{ steps.vars.outputs.BUILD_DATE }} - COMMIT=${{ steps.vars.outputs.COMMIT }} - if: github.ref == 'refs/heads/staging' - - build-and-push-tags: - runs-on: ubuntu-latest - if: github.ref_type == 'tag' && startsWith(github.ref, 'refs/tags/v') - - steps: - - name: Checkout repository - uses: actions/checkout@v6 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to Docker Hub + - name: Log in to Docker Registry uses: docker/login-action@v3 with: registry: git.fossy.my.id @@ -92,32 +59,35 @@ jobs: if echo "$VERSION" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9.]+)?$'; then MAJOR=$(echo "$VERSION" | cut -d. -f1) MINOR=$(echo "$VERSION" | cut -d. -f2) + PATCH=$(echo "$VERSION" | cut -d. -f3 | cut -d- -f1) echo "MAJOR=$MAJOR" >> $GITHUB_OUTPUT echo "MINOR=$MINOR" >> $GITHUB_OUTPUT + echo "PATCH=$PATCH" >> $GITHUB_OUTPUT if echo "$VERSION" | grep -q '-'; then + PRERELEASE_TAG=$(echo "$VERSION" | cut -d- -f2 | cut -d. -f1) echo "IS_PRERELEASE=true" >> $GITHUB_OUTPUT - echo "ADDITIONAL_TAG=staging" >> $GITHUB_OUTPUT + echo "PRERELEASE_TAG=$PRERELEASE_TAG" >> $GITHUB_OUTPUT else echo "IS_PRERELEASE=false" >> $GITHUB_OUTPUT - echo "ADDITIONAL_TAG=latest" >> $GITHUB_OUTPUT fi else echo "Invalid version format: $VERSION" exit 1 fi - - name: Build and push Docker image for release + - name: Build and push Docker image (release) uses: docker/build-push-action@v6 with: context: . push: true tags: | git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:v${{ steps.version.outputs.VERSION }} + git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:release git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:v${{ steps.version.outputs.MAJOR }}.${{ steps.version.outputs.MINOR }} git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:v${{ steps.version.outputs.MAJOR }} - git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:${{ steps.version.outputs.ADDITIONAL_TAG }} + git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:latest platforms: linux/amd64,linux/arm64 build-args: | VERSION=${{ steps.version.outputs.VERSION }} @@ -125,17 +95,17 @@ jobs: COMMIT=${{ steps.version.outputs.COMMIT }} if: steps.version.outputs.IS_PRERELEASE == 'false' - - name: Build and push Docker image for pre-release + - name: Build and push Docker image (pre-release) uses: docker/build-push-action@v6 with: context: . push: true tags: | git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:v${{ steps.version.outputs.VERSION }} - git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:${{ steps.version.outputs.ADDITIONAL_TAG }} + git.fossy.my.id/${{ secrets.DOCKER_USERNAME }}/tunnel-please-controller:staging platforms: linux/amd64,linux/arm64 build-args: | VERSION=${{ steps.version.outputs.VERSION }} BUILD_DATE=${{ steps.version.outputs.BUILD_DATE }} COMMIT=${{ steps.version.outputs.COMMIT }} - if: steps.version.outputs.IS_PRERELEASE == 'true' + if: steps.version.outputs.IS_PRERELEASE == 'true' \ No newline at end of file diff --git a/.gitea/workflows/renovate.yml b/.gitea/workflows/renovate.yml deleted file mode 100644 index 7cbb9d2..0000000 --- a/.gitea/workflows/renovate.yml +++ /dev/null @@ -1,21 +0,0 @@ -name: renovate - -on: - schedule: - - cron: "0 0 * * *" - push: - branches: - - main - -jobs: - renovate: - runs-on: ubuntu-latest - container: git.fossy.my.id/renovate-clanker/renovate:latest - steps: - - uses: actions/checkout@v6 - - run: renovate - env: - RENOVATE_CONFIG_FILE: ${{ gitea.workspace }}/renovate-config.js - LOG_LEVEL: "debug" - RENOVATE_TOKEN: ${{ secrets.RENOVATE_TOKEN }} - GITHUB_COM_TOKEN: ${{ secrets.COM_TOKEN }} \ No newline at end of file diff --git a/.gitea/workflows/sonarqube.yml b/.gitea/workflows/sonarqube.yml new file mode 100644 index 0000000..d274ff2 --- /dev/null +++ b/.gitea/workflows/sonarqube.yml @@ -0,0 +1,60 @@ +on: + push: + branches: + - main + - staging + - 'feat/**' + +name: SonarQube Scan +jobs: + sonarqube: + name: SonarQube Trigger + runs-on: ubuntu-latest + steps: + - name: Checking out + uses: actions/checkout@v6 + with: + fetch-depth: 0 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + go-version: 'stable' + cache: false + + - name: Install dependencies + run: go mod tidy + + - name: Run go vet + run: go vet ./... 2>&1 | tee vet-results.txt + + - name: Run tests with coverage + run: | + go test ./... -v -p 4 -coverprofile=coverage + + - name: Run GolangCI-Lint Analysis + uses: golangci/golangci-lint-action@v9 + with: + skip-cache: true + version: v2.6 + args: > + --issues-exit-code=0 + --output.text.path=stdout + --output.checkstyle.path=golangci-lint-report.xml + + - name: SonarQube Scan + uses: SonarSource/sonarqube-scan-action@v7.0.0 + env: + SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }} + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} + with: + args: > + -Dsonar.projectKey=tunnel-please-controller + -Dsonar.go.coverage.reportPaths=coverage + -Dsonar.test.inclusions=**/*_test.go + -Dsonar.test.exclusions=**/vendor/** + -Dsonar.exclusions=**/*_test.go,**/vendor/**,**/golangci-lint-report.xml + -Dsonar.go.govet.reportPaths=vet-results.txt + -Dsonar.go.golangci-lint.reportPaths=golangci-lint-report.xml + -Dsonar.sources=./ + -Dsonar.tests=./ \ No newline at end of file diff --git a/main.go b/main.go index c3e3d41..b0275e7 100644 --- a/main.go +++ b/main.go @@ -47,7 +47,6 @@ func main() { connect, err := pgx.Connect(ctx, dbURL) if err != nil { panic(err) - return } defer func(connect *pgx.Conn, ctx context.Context) { err = connect.Close(ctx)