From 4c2ea5896bcab47078d73dd71e83e59df6fe9175 Mon Sep 17 00:00:00 2001 From: nite07 Date: Wed, 13 Mar 2024 00:11:34 +0800 Subject: [PATCH] add: version cmd add: dockerfile --- .github/workflows/docker.yaml | 66 +++++++++++++++++++++++++++++++ .github/workflows/goreleaser.yaml | 2 +- .goreleaser.yaml | 2 +- Dockerfile | 17 ++++++++ LICENSE.txt | 21 ++++++++++ cmd/root.go | 7 +++- cmd/version.go | 20 ++++++++++ main.go | 7 ++++ 8 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/docker.yaml create mode 100644 Dockerfile create mode 100644 LICENSE.txt create mode 100644 cmd/version.go diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 0000000..dcdc273 --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,66 @@ +name: Build and Push Docker + +on: + push: + branches: + - dev + tags: + - "*" + workflow_dispatch: + +jobs: + build-and-push: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_PASSWORD }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@v5 + with: + images: | + ${{ secrets.DOCKER_HUB_USERNAME }}/sub2sing-box + ghcr.io/${{ github.repository }} + + - name: Prepare tags and build args + id: prep + run: | + if [[ "${{ github.event_name }}" == 'workflow_dispatch' ]]; then + VERSION="${{ github.sha }}" + fi + if [[ "$GITHUB_REF" == 'refs/heads/dev' ]]; then + VERSION="${{ github.sha }}" + fi + if [[ "$GITHUB_REF" == 'refs/tags/'* ]]; then + VERSION=$TAG_NAME + fi + echo "version=${VERSION}" >> $GITHUB_ENV + + - name: Set up Docker buildx + uses: docker/setup-buildx-action@v3 + + - name: Build and push Docker image to GHCR and Docker Hub + uses: docker/build-push-action@v5 + with: + context: . + file: ./Dockerfile + build-args: version=${{ steps.prep.outputs.version }} + push: true + platforms: linux/amd64,linux/arm,linux/arm64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.github/workflows/goreleaser.yaml b/.github/workflows/goreleaser.yaml index 8bca9ef..1f97cec 100644 --- a/.github/workflows/goreleaser.yaml +++ b/.github/workflows/goreleaser.yaml @@ -1,4 +1,4 @@ -name: build +name: Build and Release on: push: diff --git a/.goreleaser.yaml b/.goreleaser.yaml index f5af655..651f1c6 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -12,7 +12,7 @@ builds: - arm - "386" ldflags: - - -s -w + - -s -w -X sub2sing-box/main.Version={{ .Version }} no_unique_dist_dir: true binary: "{{ .ProjectName }}-{{ .Os }}-{{ .Arch }}" archives: diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..8feabff --- /dev/null +++ b/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.21 as builder +LABEL authors="nite07" + +WORKDIR /app + +COPY . . +RUN go mod download + +ARG version + +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X sub2clash/config.Version=${version}" -o sub2sing-box main.go + +FROM alpine:latest + +COPY --from=builder /app/sub2sing-box /app/sub2sing-box + +ENTRYPOINT ["/app/sub2sing-box","server"] diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..83509c3 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 Nite07 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/cmd/root.go b/cmd/root.go index a62c8db..6d8c1e7 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -1,8 +1,11 @@ package cmd -import "github.com/spf13/cobra" +import ( + "github.com/spf13/cobra" +) var RootCmd = &cobra.Command{} -func init() { +func SetVersion(version string) { + RootCmd.Version = version } diff --git a/cmd/version.go b/cmd/version.go new file mode 100644 index 0000000..2bb8dc2 --- /dev/null +++ b/cmd/version.go @@ -0,0 +1,20 @@ +package cmd + +import ( + "fmt" + + "github.com/spf13/cobra" +) + +var versionCmd = &cobra.Command{ + Use: "version", + Short: "Print version", + Long: "Print version", + Run: func(cmd *cobra.Command, args []string) { + fmt.Println("version: " + RootCmd.Version) + }, +} + +func init() { + RootCmd.AddCommand(versionCmd) +} diff --git a/main.go b/main.go index 408dbce..98cf883 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,13 @@ import ( "sub2sing-box/cmd" ) +var Version string + +func init() { + Version = "dev" + cmd.SetVersion(Version) +} + func main() { if err := cmd.RootCmd.Execute(); err != nil { fmt.Println(err)