From 401407617a496529095cd2459c84e58b623a1831 Mon Sep 17 00:00:00 2001 From: Kevin Franklin Kim Date: Thu, 18 Sep 2025 23:20:40 +0200 Subject: [PATCH] feat: add docker build --- .dockerignore | 2 + .../workflows/{releaser.yml => release.yml} | 22 ++-- .gitignore | 6 + .goreleaser.yml | 103 +++++++++++++++--- Dockerfile | 12 ++ 5 files changed, 124 insertions(+), 21 deletions(-) create mode 100644 .dockerignore rename .github/workflows/{releaser.yml => release.yml} (60%) create mode 100644 Dockerfile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..7f9c4e0 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +gotsrpc +dist diff --git a/.github/workflows/releaser.yml b/.github/workflows/release.yml similarity index 60% rename from .github/workflows/releaser.yml rename to .github/workflows/release.yml index 2a5f992..f032701 100644 --- a/.github/workflows/releaser.yml +++ b/.github/workflows/release.yml @@ -6,32 +6,40 @@ on: - v*.*.* workflow_dispatch: -env: - GOFLAGS: -mod=readonly - GOPROXY: https://proxy.golang.org +permissions: + contents: write jobs: - goreleaser: + release: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: fetch-depth: 0 - - uses: actions/setup-go@v5 + - uses: jdx/mise-action@v3 + + - uses: actions/setup-go@v6 with: check-latest: true go-version-file: go.mod + - uses: docker/setup-qemu-action@v3 + + - uses: docker/setup-buildx-action@v3 + - id: app_token uses: tibdex/github-app-token@v2 with: app_id: ${{ secrets.TOKEN_APP_ID }} private_key: ${{ secrets.TOKEN_APP_PRIVATE_KEY }} + - name: Login to docker.io + run: docker login -u ${{ secrets.DOCKERHUB_USERNAME }} -p ${{ secrets.DOCKERHUB_TOKEN }} + - uses: goreleaser/goreleaser-action@v6 with: - version: latest + version: '~> v2' args: release --clean env: GITHUB_TOKEN: ${{ steps.app_token.outputs.token }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 85ad627..76b49c1 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,9 @@ tmp/ ## Editorconfig !.editorconfig +## Docker +!.dockerignore + ## Husky !.husky/ !.husky.yaml @@ -32,3 +35,6 @@ tmp/ /go.work.sum !.golangci.yaml !.goreleaser.yaml + +## Mise +!.mise.toml diff --git a/.goreleaser.yml b/.goreleaser.yml index 1ff4252..57f75dc 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -1,10 +1,20 @@ version: 2 +project_name: gotsrpc + builds: - binary: gotsrpc main: ./cmd/gotsrpc/gotsrpc.go env: - CGO_ENABLED=0 + flags: + - -trimpath + - -tags=safe + ldflags: + - -s -w + - -X cmd/gotsrpc/gotsrpc.version={{.Version}} + - -X cmd/gotsrpc/gotsrpc.commitHash={{.FullCommit}} + - -X cmd/gotsrpc/gotsrpc.buildTimestamp={{.Timestamp}} goos: - windows - darwin @@ -12,22 +22,16 @@ builds: goarch: - amd64 - arm64 - goarm: - - 7 - flags: - - -trimpath - ldflags: - - -s -w -X cmd/gotsrpc/gotsrpc.version={{.Version}} + +archives: + - formats: [ tar.gz ] + format_overrides: + - goos: windows + formats: [ zip ] release: prerelease: auto -archives: - - format: tar.gz - format_overrides: - - goos: windows - format: zip - changelog: use: github-native @@ -35,6 +39,77 @@ brews: - repository: owner: foomo name: homebrew-tap - caveats: "gotsrpc gotsrpc.yml" + caveats: "gotsrpc" homepage: "https://github.com/foomo/gotsrpc" - description: "CLI utility to generate go and typescript RPC calls easily" \ No newline at end of file + description: "CLI utility to generate go and typescript RPC calls easily" + +dockers: + - use: buildx + goos: linux + goarch: amd64 + dockerfile: Dockerfile + image_templates: + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:latest-amd64{{ end }}' + - 'foomo/gotsrpc:{{ .Version }}-amd64' + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:{{ .Major }}-amd64{{ end }}' + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:{{ .Major }}.{{ .Minor }}-amd64{{ end }}' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=CLI utility to generate go and typescript RPC calls easily' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation={{.GitURL}}' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/amd64' + + - use: buildx + goos: linux + goarch: arm64 + dockerfile: Dockerfile + image_templates: + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:latest-arm64{{ end }}' + - 'foomo/gotsrpc:{{ .Version }}-arm64' + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:{{ .Major }}-arm64{{ end }}' + - '{{ if eq .Prerelease "" }}foomo/gotsrpc:{{ .Major }}.{{ .Minor }}-arm64{{ end }}' + build_flag_templates: + - '--pull' + # https://github.com/opencontainers/image-spec/blob/main/annotations.md#pre-defined-annotation-keys + - '--label=org.opencontainers.image.title={{.ProjectName}}' + - '--label=org.opencontainers.image.description=Project Oriented SHELL' + - '--label=org.opencontainers.image.source={{.GitURL}}' + - '--label=org.opencontainers.image.url={{.GitURL}}' + - '--label=org.opencontainers.image.documentation={{.GitURL}}' + - '--label=org.opencontainers.image.created={{.Date}}' + - '--label=org.opencontainers.image.revision={{.FullCommit}}' + - '--label=org.opencontainers.image.version={{.Version}}' + - '--platform=linux/arm64' + +docker_manifests: + # basic + - name_template: 'foomo/gotsrpc:latest' + image_templates: + - 'foomo/gotsrpc:latest-amd64' + - 'foomo/gotsrpc:latest-arm64' + skip_push: auto + + - name_template: 'foomo/gotsrpc:{{ .Version }}' + image_templates: + - 'foomo/gotsrpc:{{ .Version }}-amd64' + - 'foomo/gotsrpc:{{ .Version }}-arm64' + skip_push: auto + + - name_template: 'foomo/gotsrpc:{{ .Major }}' + image_templates: + - 'foomo/gotsrpc:{{ .Major }}-amd64' + - 'foomo/gotsrpc:{{ .Major }}-arm64' + skip_push: auto + + - name_template: 'foomo/gotsrpc:{{ .Major }}.{{ .Minor }}' + image_templates: + - 'foomo/gotsrpc:{{ .Major }}.{{ .Minor }}-amd64' + - 'foomo/gotsrpc:{{ .Major }}.{{ .Minor }}-arm64' + skip_push: auto diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4308b36 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,12 @@ +FROM alpine:latest + +RUN apk --no-cache add ca-certificates + +RUN adduser -D -u 1001 -g 1001 gotsrpc + +COPY gotsrpc /usr/bin/ + +USER gotsrpc +WORKDIR /home/gotsrpc + +ENTRYPOINT ["gotsrpc"]