diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..250792c1 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,53 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + +jobs: + release: + name: Release + strategy: + matrix: + os: [ ubuntu-latest ] + go-version: [ 1.14.x ] + runs-on: ${{ matrix.os }} + + steps: + - name: Install Go + uses: actions/setup-go@v1 + with: + go-version: ${{ matrix.go-version }} + + - name: Checkout code + uses: actions/checkout@v2 + + # So GoReleaser can generate the changelog properly + - name: Unshallowify the repo clone + run: git fetch --prune --unshallow + + - name: Print Go version and environment + id: vars + run: | + printf "Using go at: $(which go)\n" + printf "Go version: $(go version)\n" + printf "\n\nGo environment:\n\n" + go env + printf "\n\nSystem environment:\n\n" + env + + # https://github.community/t5/GitHub-Actions/How-to-get-just-the-tag-name/m-p/32167/highlight/true#M1027 + - name: Get the version + id: get_version + run: echo "::set-output name=version_tag::${GITHUB_REF/refs\/tags\//}" + + # GoReleaser will take care of publishing those artifacts into the release + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v1 + with: + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + TAG: ${{ steps.vars.outputs.version_tag }} diff --git a/.gitignore b/.gitignore index 16d38e0e..d8128f54 100644 --- a/.gitignore +++ b/.gitignore @@ -16,3 +16,8 @@ cmd/caddy/caddy.exe # go modules vendor + +# goreleaser artifacts +dist +caddy-build +caddy-dist \ No newline at end of file diff --git a/.goreleaser.yml b/.goreleaser.yml new file mode 100644 index 00000000..c87ba6b9 --- /dev/null +++ b/.goreleaser.yml @@ -0,0 +1,66 @@ +before: + hooks: + - mkdir -p caddy-build + - cp cmd/caddy/main.go caddy-build/main.go + - cp ./go.mod caddy-build/go.mod + - sed -i.bkp s/github.com\/caddyserver\/caddy\/v2/caddy/g ./caddy-build/go.mod + # GoReleaser doesn't seem to offer {{.Tag}} at this stage, so we have to embed it into the env + # so we run: TAG=$(git describe --abbrev=0) goreleaser release --rm-dist --skip-publish --skip-validate + - go mod edit -require=github.com/caddyserver/caddy/v2@{{.Env.TAG}} ./caddy-build/go.mod + - git clone --depth 1 https://github.com/caddyserver/dist caddy-dist + - go mod download +builds: +- env: + - CGO_ENABLED=0 + - GO111MODULE=on + main: main.go + dir: ./caddy-build + binary: caddy + goos: + - darwin + - linux + - windows + - freebsd + goarch: + - amd64 + - 386 + - arm + - arm64 + goarm: + - 6 + - 7 + ignore: + - goos: darwin + goarch: 386 + - goos: darwin + goarch: arm + flags: + - -trimpath + ldflags: + - -s -w +archives: + - format_overrides: + - goos: windows + format: zip + replacements: + darwin: macOS + linux: Linux + windows: Windows + 386: i386 + amd64: x86_64 +checksum: + algorithm: sha512 +release: + github: + owner: caddyserver + name: caddy + draft: true + prerelease: auto +changelog: + sort: asc + filters: + exclude: + - '^docs:' + - '^test:' + - '^chore:' + - '^\w+\s+' # a hack to remove commit messages without colons thus don't correspond to a package