diff --git a/.github/workflows/deploy-linux.yml b/.github/workflows/deploy-linux.yml index 4d7cb14..537af7c 100644 --- a/.github/workflows/deploy-linux.yml +++ b/.github/workflows/deploy-linux.yml @@ -3,16 +3,12 @@ name: Build and Deploy Linux Binary on: push: branches: [ main, master ] - paths: - - '**' - - '!.github/workflows/**' - - '.github/workflows/deploy-linux.yml' workflow_dispatch: inputs: mode: description: 'Operation mode' required: true - default: 'build' + default: 'build-only' type: choice options: - build-only @@ -32,11 +28,6 @@ permissions: env: BINARY_NAME: ppanel-server - CONFIG_PATH: /app/etc/ppanel.yaml - DEPLOY_PATH: /opt/ppanel - SERVICE_NAME: ppanel-server - BACKUP_PATH: /opt/ppanel/backups - LOG_PATH: /opt/ppanel/logs jobs: build: @@ -66,7 +57,7 @@ jobs: if [ "${{ github.event_name }}" = "release" ]; then VERSION=${GITHUB_REF#refs/tags/} elif [ -n "${{ github.event.inputs.version }}" ]; then - VERSION=${{ github.event.inputs.version }} + VERSION="${{ github.event.inputs.version }}" else VERSION=$(git describe --tags --always --dirty) fi @@ -150,9 +141,9 @@ jobs: WorkingDirectory=$DEPLOY_PATH ExecStart=$DEPLOY_PATH/ppanel-server run --config $CONFIG_PATH Restart=always - RestartSec=5 - StandardOutput=journal - StandardError=journal + RestartSec=5 + StandardOutput=journal + StandardError=journal [Install] WantedBy=multi-user.target @@ -213,7 +204,7 @@ jobs: name: Deploy to Staging runs-on: ubuntu-latest needs: build - if: (github.event.inputs.mode == 'deploy-staging' || github.event.inputs.mode == 'build-and-deploy') && env.STAGING_HOST != '' + if: (github.event.inputs.mode == 'deploy-staging' || github.event.inputs.mode == 'build-and-deploy') && secrets.STAGING_HOST != '' steps: - name: Download build artifacts @@ -309,8 +300,8 @@ jobs: deploy-production: name: Deploy to Production runs-on: ubuntu-latest - needs: [build, deploy-staging] - if: (github.event.inputs.mode == 'deploy-production' || github.event.inputs.mode == 'build-and-deploy' || github.event_name == 'release') && env.PRODUCTION_HOST != '' + needs: build + if: (github.event.inputs.mode == 'deploy-production' || github.event.inputs.mode == 'build-and-deploy' || github.event_name == 'release') && secrets.PRODUCTION_HOST != '' steps: - name: Download build artifacts @@ -415,7 +406,7 @@ jobs: name: Build Docker Image runs-on: ubuntu-latest needs: build - if: (secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD) && (github.event_name == 'release' || github.event.inputs.mode == 'build-and-deploy') + if: secrets.DOCKER_USERNAME != '' && secrets.DOCKER_PASSWORD != '' && (github.event_name == 'release' || github.event.inputs.mode == 'build-and-deploy') steps: - name: Checkout repository diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 0000000..6712871 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,130 @@ +version: 2 + +before: + hooks: + - go mod tidy + - go generate ./... + +builds: + - env: + - CGO_ENABLED=0 + goos: + - linux + - darwin + - windows + goarch: + - "386" + - amd64 + - arm64 + ignore: + - goos: darwin + goarch: "386" + binary: ppanel-server + ldflags: + - -s -w + - -X "github.com/perfect-panel/server/pkg/constant.Version={{.Version}}" + - -X "github.com/perfect-panel/server/pkg/constant.BuildTime={{.Date}}" + - -X "github.com/perfect-panel/server/pkg/constant.GitCommit={{.Commit}}" + main: ./ppanel.go + +archives: + - format: tar.gz + name_template: >- + {{ .ProjectName }}- + {{- .Version }}- + {{- title .Os }}- + {{- if eq .Arch "amd64" }}x86_64 + {{- else if eq .Arch "386" }}i386 + {{- else }}{{ .Arch }}{{ end }} + {{- if .Arm }}v{{ .Arm }}{{ end }} + files: + - LICENSE + - etc/* + format_overrides: + - goos: windows + format: zip + +checksum: + name_template: "checksums.txt" + +snapshot: + name_template: "{{ incpatch .Version }}-next" + +changelog: + sort: asc + use: github + filters: + exclude: + - "^docs:" + - "^test:" + - "^chore:" + - Merge pull request + groups: + - title: Features + regexp: "^.*feat[(\\w)]*:+.*$" + order: 0 + - title: 'Bug fixes' + regexp: "^.*fix[(\\w)]*:+.*$" + order: 1 + - title: Others + order: 999 + +dockers: + - image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:{{ .Tag }}" + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:v{{ .Major }}" + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:v{{ .Major }}.{{ .Minor }}" + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:latest" + dockerfile: Dockerfile + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--platform=linux/amd64" + use: docker + extra_files: + - etc/ + + - image_templates: + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:{{ .Tag }}-arm64" + - "{{ .Env.DOCKER_USERNAME }}/ppanel-server:v{{ .Major }}.{{ .Minor }}-arm64" + dockerfile: Dockerfile + build_flag_templates: + - "--pull" + - "--label=org.opencontainers.image.created={{.Date}}" + - "--label=org.opencontainers.image.title={{.ProjectName}}" + - "--label=org.opencontainers.image.revision={{.FullCommit}}" + - "--label=org.opencontainers.image.version={{.Version}}" + - "--platform=linux/arm64" + use: docker + goarch: arm64 + extra_files: + - etc/ + +docker_signs: + - cmd: cosign + args: + - "sign" + - "${artifact}@${digest}" + env: + - COSIGN_EXPERIMENTAL=1 + +release: + github: + owner: perfect-panel + name: server + draft: false + prerelease: auto + name_template: "{{.ProjectName}} v{{.Version}}" + header: | + ## ppanel-server {{.Version}} + + Welcome to this new release! + footer: | + Docker images are available at: + - `{{ .Env.DOCKER_USERNAME }}/ppanel-server:{{ .Tag }}` + - `{{ .Env.DOCKER_USERNAME }}/ppanel-server:latest` + + For more information, visit our documentation. \ No newline at end of file