diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3ff8fa1..7d09237 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ permissions: jobs: go-check: - uses: duynhlab/gha-workflows/.github/workflows/go-check.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/go-check.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: command-test: 'go test -race -coverprofile=coverage.out ./...' lint: true @@ -25,14 +25,14 @@ jobs: integration-command: 'go test -tags=integration -covermode=atomic -coverprofile=coverage-integration.out ./internal/core/repository/...' gitleaks: - uses: duynhlab/gha-workflows/.github/workflows/gitleaks.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/gitleaks.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main permissions: contents: read security-events: write sonar: needs: [go-check, gitleaks] - uses: duynhlab/gha-workflows/.github/workflows/sonarqube.yml@e321897e5c28e7c861b9d8beb37614e1c5823f42 # main + uses: duynhlab/gha-workflows/.github/workflows/sonarqube.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: project-key: 'duynhlab_${{ github.event.repository.name }}' organization: 'duynhlab' @@ -43,7 +43,7 @@ jobs: docker-build: needs: [go-check, sonar] - uses: duynhlab/gha-workflows/.github/workflows/docker-build-go.yml@566b62220abb6db150099ca11cb7a9904288f3b5 # main + uses: duynhlab/gha-workflows/.github/workflows/docker-build-go.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: image-name: ${{ github.event.repository.name }} push: true @@ -58,7 +58,7 @@ jobs: trivy-report: needs: [docker-build] if: needs.docker-build.outputs.scan-status == 'pass' - uses: duynhlab/gha-workflows/.github/workflows/trivy-scan.yml@e321897e5c28e7c861b9d8beb37614e1c5823f42 # main + uses: duynhlab/gha-workflows/.github/workflows/trivy-scan.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: image-ref: ghcr.io/${{ github.repository }}/${{ github.event.repository.name }}@${{ needs.docker-build.outputs.digest }} severity: 'CRITICAL,HIGH,MEDIUM' @@ -75,7 +75,7 @@ jobs: docker-sign: needs: [docker-build] - uses: duynhlab/gha-workflows/.github/workflows/docker-sign.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/docker-sign.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: tags: ${{ needs.docker-build.outputs.tags }} digest: ${{ needs.docker-build.outputs.digest }} @@ -89,7 +89,7 @@ jobs: release-binary: needs: [go-check, sonar] if: startsWith(github.ref, 'refs/tags/v') - uses: duynhlab/gha-workflows/.github/workflows/goreleaser.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/goreleaser.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main permissions: contents: write id-token: write @@ -97,7 +97,7 @@ jobs: notify: if: always() needs: [go-check, gitleaks, sonar, docker-build, trivy-report, docker-sign, release-binary] - uses: duynhlab/gha-workflows/.github/workflows/status.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/status.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: slack_channel_id: "C0AD82A9A74" gsheet_spreadsheet_id: "1F2VUrAOyMGnETApp5yA-ldCW81ConiQXnWYZVxKas_0" diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index beb7530..da568e8 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,14 +11,14 @@ permissions: jobs: pr-checks: - uses: duynhlab/gha-workflows/.github/workflows/pr-checks.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/pr-checks.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: slack_channel_id: "C0AD82A9A74" secrets: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} go-check: - uses: duynhlab/gha-workflows/.github/workflows/go-check.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/go-check.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: command-test: 'go test -race -coverprofile=coverage.out ./...' lint: true @@ -28,14 +28,14 @@ jobs: integration-command: 'go test -tags=integration -covermode=atomic -coverprofile=coverage-integration.out ./internal/core/repository/...' gitleaks: - uses: duynhlab/gha-workflows/.github/workflows/gitleaks.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/gitleaks.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main permissions: contents: read security-events: write sonar: needs: [go-check, gitleaks] - uses: duynhlab/gha-workflows/.github/workflows/sonarqube.yml@e321897e5c28e7c861b9d8beb37614e1c5823f42 # main + uses: duynhlab/gha-workflows/.github/workflows/sonarqube.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: project-key: 'duynhlab_${{ github.event.repository.name }}' organization: 'duynhlab' @@ -49,7 +49,7 @@ jobs: # fail there — skip instead of painting every deps PR red. if: always() && github.actor != 'dependabot[bot]' needs: [pr-checks, go-check, gitleaks, sonar] - uses: duynhlab/gha-workflows/.github/workflows/status.yml@54fd20d46fd99b5fb85e6029247fcaba865c1481 # main + uses: duynhlab/gha-workflows/.github/workflows/status.yml@ff848d88c8b3c301dcd1292cb8367221d3fed64e # main with: slack_channel_id: "C0AD82A9A74" slack_thread_ts: ${{ needs.pr-checks.outputs.slack_thread_ts }} diff --git a/Dockerfile b/Dockerfile index 1bb9a21..4373e8c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # --platform pins the builder to the BUILD host so a multi-arch build # cross-compiles instead of running this whole stage under emulation. -FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.26.7-alpine AS builder +FROM --platform=$BUILDPLATFORM docker.io/library/golang:1.27.1-alpine AS builder ARG TARGETOS TARGETARCH WORKDIR /app COPY go.mod go.sum ./ diff --git a/README.md b/README.md index da84ce2..cb4a387 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ minimal public view of them. | Area | Technology | |------|------------| -| Runtime | Go 1.26 | +| Runtime | Go 1.27 | | Transports | HTTP only — no gRPC server, no client, no worker | | Data | PostgreSQL — one table, `user_profiles` | | Platform libraries | `authmw`, `dbx`, `httpx`, `logger/zapx`, `migratex`, `obsx` | diff --git a/go.mod b/go.mod index cb87826..4c50eb6 100644 --- a/go.mod +++ b/go.mod @@ -1,15 +1,15 @@ module github.com/duynhlab/user-service -go 1.26.7 +go 1.27.1 require ( - github.com/duynhlab/pkg/authmw v0.37.2 - github.com/duynhlab/pkg/dbx v0.37.0 - github.com/duynhlab/pkg/httpmw v0.2.0 - github.com/duynhlab/pkg/httpx v0.37.1 - github.com/duynhlab/pkg/logger/slogx v0.3.0 - github.com/duynhlab/pkg/migratex v0.36.2 - github.com/duynhlab/pkg/obsx v0.47.0 + github.com/duynhlab/pkg/authmw v0.38.0 + github.com/duynhlab/pkg/dbx v0.38.0 + github.com/duynhlab/pkg/httpmw v0.4.0 + github.com/duynhlab/pkg/httpx v0.38.0 + github.com/duynhlab/pkg/logger/slogx v0.4.0 + github.com/duynhlab/pkg/migratex v0.37.0 + github.com/duynhlab/pkg/obsx v0.48.0 github.com/gin-gonic/gin v1.12.0 github.com/jackc/pgx/v5 v5.11.0 github.com/joho/godotenv v1.5.1 @@ -102,7 +102,7 @@ require ( go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/bridges/otelslog v0.20.1 // indirect go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.71.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 // indirect go.opentelemetry.io/contrib/instrumentation/runtime v0.71.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.22.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.46.0 // indirect diff --git a/go.sum b/go.sum index 2d8907d..6d10cae 100644 --- a/go.sum +++ b/go.sum @@ -50,20 +50,20 @@ github.com/docker/go-connections v0.7.0 h1:6SsRfJddP22WMrCkj19x9WKjEDTB+ahsdiGYf github.com/docker/go-connections v0.7.0/go.mod h1:no1qkHdjq7kLMGUXYAduOhYPSJxxvgWBh7ogVvptn3Q= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/duynhlab/pkg/authmw v0.37.2 h1:eqeTtfsghqKpOIjJFloJO0cNmKdHDvlGPfUbriBAHcI= -github.com/duynhlab/pkg/authmw v0.37.2/go.mod h1:IB1s7C9HiyUAug3foPWzYwg8dUzB3bTgMPXR6Gb7SGY= -github.com/duynhlab/pkg/dbx v0.37.0 h1:1nnF6dds3iHmiviPzL+HbLEHNyxGyowHRx6hn2af6Fg= -github.com/duynhlab/pkg/dbx v0.37.0/go.mod h1:oYXOz72MB7hpDPg7n+81fMEjPYAvrBQvKH+tXW6vOsg= -github.com/duynhlab/pkg/httpmw v0.2.0 h1:DvGmyZzVii7QuJm5UM40DxEAT0gbUT1KZEbN1vNcdIE= -github.com/duynhlab/pkg/httpmw v0.2.0/go.mod h1:dZlOi0zgU3BjDI63nbw10dN/I8N1/ycF9Eb3wqQnhDU= -github.com/duynhlab/pkg/httpx v0.37.1 h1:WIN6sQ3FsGZjFIPZGPESaYyGewCRVoT5l2NTPvI1dc0= -github.com/duynhlab/pkg/httpx v0.37.1/go.mod h1:CzOtG+Qvdr/g5YXF7d8XmtBjMIsK+WpXoj59nYM7z+c= -github.com/duynhlab/pkg/logger/slogx v0.3.0 h1:oxhx2P3Q1kTdgoTF4iiuxBtBW+TuWyDiaooSbRCfkVA= -github.com/duynhlab/pkg/logger/slogx v0.3.0/go.mod h1:9edmpl0M2O0UiLpxjOjjyGGNIVH+/yCsoTeIvFnL5cQ= -github.com/duynhlab/pkg/migratex v0.36.2 h1:Sab/5qFhXU7awrqXvwKCioXs4myOz2nAE8Wbc5x7bQ0= -github.com/duynhlab/pkg/migratex v0.36.2/go.mod h1:rF/I+XnjX0k2BoTtfAkiuDe1U/2ztifUb+jHLzPP0Ro= -github.com/duynhlab/pkg/obsx v0.47.0 h1:H0MoqkpbdzgcZs2ioxhZwBrDg7HCApctmUuLpqwSo84= -github.com/duynhlab/pkg/obsx v0.47.0/go.mod h1:CfQDeE5o+Zo30BnyTpDYbubkHnyLyH+mhMNDjKD0tyE= +github.com/duynhlab/pkg/authmw v0.38.0 h1:J9nSlrD0aGrb50UNp4G0uJcUsORiAsYT7fuWA474iGc= +github.com/duynhlab/pkg/authmw v0.38.0/go.mod h1:zJheLTQRZZaJknGZcO5jsbijPjA5VeypQmphSsPcZnM= +github.com/duynhlab/pkg/dbx v0.38.0 h1:zrrQfbXq3KGxQ17sQmkXRBpedY8Vd7wTjAtGkL1SloI= +github.com/duynhlab/pkg/dbx v0.38.0/go.mod h1:j0gZzgtneu+YaG5uIAgZk4/Oy5nz7CzMfecKTJyGR/Y= +github.com/duynhlab/pkg/httpmw v0.4.0 h1:eQRGOJqFf2EtaOkV5EC59JM3+rUt8xRTCWAxxONAsDU= +github.com/duynhlab/pkg/httpmw v0.4.0/go.mod h1:a68cAq+KGakPQUYOaHQfE2EYOFOGwVoYG/bAan+YQ5I= +github.com/duynhlab/pkg/httpx v0.38.0 h1:0hc7NBm6Rxpq5lLywaANUwPDL9M9b3qpvGTzlsfOI7Y= +github.com/duynhlab/pkg/httpx v0.38.0/go.mod h1:Rjhq+qEQDye4hyNVvWQcH2flvDLRpMQ7nuAa9lX/Kl0= +github.com/duynhlab/pkg/logger/slogx v0.4.0 h1:9pAdFg9N0hDd+OQocIc41RZ6Nr2SjDpSgvJba0DOjHs= +github.com/duynhlab/pkg/logger/slogx v0.4.0/go.mod h1:z61sQ3Q4of48VbaQSnPBCHgBzGX8YRvQaxEc82O66t0= +github.com/duynhlab/pkg/migratex v0.37.0 h1:CAKzeYtxxKNPncS9DRDrl+5PKfVzAJmgxiVkIKlkp8U= +github.com/duynhlab/pkg/migratex v0.37.0/go.mod h1:HxRDKXQidFhTciW5rX977V+eAYOy7GRf5nb8zHVYSjA= +github.com/duynhlab/pkg/obsx v0.48.0 h1:DAdPJsQudqvbOpk1rF+kOMktiq+fzVSgY/C3OxMg68s= +github.com/duynhlab/pkg/obsx v0.48.0/go.mod h1:jYj8QAaH2bag0vvw8gDI76dn0oaa4PhbjfTqRYle/+Q= github.com/ebitengine/purego v0.10.1 h1:dewVBCBT2GaMu1SrNTYxQhgQBethzfhiwvZiLGP/qyY= github.com/ebitengine/purego v0.10.1/go.mod h1:iIjxzd6CiRiOG0UyXP+V1+jWqUXVjPKLAI0mRfJZTmQ= github.com/exaring/otelpgx v0.11.1 h1:pE79fIg/qh/Lpu00kvswFC5dKfqyJJhMJ4Y4N3w5Lj4= @@ -229,8 +229,8 @@ go.opentelemetry.io/contrib/bridges/otelslog v0.20.1 h1:5sHc4ToTFjfSZCtGAAM6jPun go.opentelemetry.io/contrib/bridges/otelslog v0.20.1/go.mod h1:oa6kgvyz/3GYW04dohd0++xJIH4xdQY8PAbpeCMaM8M= go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.71.0 h1:TMTU0sQyqsF1QU+/Q4LAZlLOx1L3FJDbk5N2RVB1nx4= go.opentelemetry.io/contrib/instrumentation/github.com/gin-gonic/gin/otelgin v0.71.0/go.mod h1:QzTELfxkj/tFEZSD22OPPwLet5nIPmcdmZPeISk4C8M= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0 h1:LMuyCAyfalSjDyjdC65nK6N0zoTT63+E/u95X0JovZI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.70.0/go.mod h1:085m8qbm4hgc8rZWGDEa4vmyyo2c3nPxUslYUKUIU04= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0 h1:3g7B90UzBltIDKq1/5mrTGxTnOFDV0ICOhLoxiZ8jlg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.71.0/go.mod h1:Ef8SuTh59BT7+ofpDxN9z+yOlc4t2GjLmKDgYNJL/NU= go.opentelemetry.io/contrib/instrumentation/runtime v0.71.0 h1:v4KkRLVvE1cWqTJDfZZkTCG+Z4aolsa6RVos0FX7vqE= go.opentelemetry.io/contrib/instrumentation/runtime v0.71.0/go.mod h1:g/xbuPC0XbgwMdKuyF5sKOUUEsorSkN6APydyFP/H9E= go.opentelemetry.io/contrib/propagators/b3 v1.46.0 h1:OFVqWObn7xLIbOjE/koO0LS9fZJNgAyBD0msA+UQAoc=