From 062115e4f070764d61565c0364359247562e2f1b Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 10 Sep 2017 17:07:28 -0300 Subject: [PATCH 1/4] new docs --- Makefile | 27 +- README.md | 552 +------------------------------------- docs/000-introduction.md | 14 + docs/010-quick-start.md | 113 ++++++++ docs/020-environment.md | 33 +++ docs/030-customization.md | 9 + docs/040-project.md | 12 + docs/050-build.md | 80 ++++++ docs/060-archive.md | 57 ++++ docs/070-checksum.md | 22 ++ docs/080-snapshots.md | 20 ++ docs/100-fpm.md | 51 ++++ docs/110-snapcraft.md | 63 +++++ docs/115-release.md | 30 +++ docs/120-homebrew.md | 90 +++++++ docs/140-ci.md | 25 ++ docs/999-links.md | 13 + 17 files changed, 651 insertions(+), 560 deletions(-) create mode 100644 docs/000-introduction.md create mode 100644 docs/010-quick-start.md create mode 100644 docs/020-environment.md create mode 100644 docs/030-customization.md create mode 100644 docs/040-project.md create mode 100644 docs/050-build.md create mode 100644 docs/060-archive.md create mode 100644 docs/070-checksum.md create mode 100644 docs/080-snapshots.md create mode 100644 docs/100-fpm.md create mode 100644 docs/110-snapcraft.md create mode 100644 docs/115-release.md create mode 100644 docs/120-homebrew.md create mode 100644 docs/140-ci.md create mode 100644 docs/999-links.md diff --git a/Makefile b/Makefile index 9b5850b03..0fac070f9 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,8 @@ SOURCE_FILES?=$$(go list ./... | grep -v /vendor/) TEST_PATTERN?=. TEST_OPTIONS?= -setup: ## Install all the build and lint dependencies +# Install all the build and lint dependencies +setup: go get -u github.com/alecthomas/gometalinter go get -u github.com/golang/dep/cmd/dep go get -u github.com/pierrre/gotestcover @@ -10,16 +11,20 @@ setup: ## Install all the build and lint dependencies dep ensure gometalinter --install -test: ## Run all the tests +# Run all the tests +test: gotestcover $(TEST_OPTIONS) -covermode=atomic -coverprofile=coverage.txt $(SOURCE_FILES) -run $(TEST_PATTERN) -timeout=2m -cover: test ## Run all the tests and opens the coverage report +# Run all the tests and opens the coverage report +cover: test go tool cover -html=coverage.txt -fmt: ## gofmt and goimports all go files +# gofmt and goimports all go files +fmt: find . -name '*.go' -not -wholename './vendor/*' | while read -r file; do gofmt -w -s "$$file"; goimports -w "$$file"; done -lint: ## Run all the linters +# Run all the linters +lint: gometalinter --vendor --disable-all \ --enable=deadcode \ --enable=ineffassign \ @@ -35,13 +40,15 @@ lint: ## Run all the linters --deadline=10m \ ./... -ci: test lint ## Run all the tests and code checks +# Run all the tests and code checks +ci: test lint -build: ## Build a beta version of goreleaser +# Build a beta version of goreleaser +build: go build -# Absolutely awesome: http://marmelab.com/blog/2016/02/29/auto-documented-makefile.html -help: - @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' +# Generate the static documentation +static: + @static-docs -in docs -out ../goreleaser.github.io -title GoReleaser -subtitle "Deliver Go binaries as fast and easily as possible" .DEFAULT_GOAL := build diff --git a/README.md b/README.md index 72ea68759..1c40bccb1 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,6 @@ --- - GoReleaser builds Go binaries for several platforms, creates a GitHub release and then pushes a Homebrew formula to a tap repository. All that wrapped in your favorite CI. @@ -25,556 +24,9 @@ We appreciate your contribution. Please refer to our [contributing guidelines](C For questions join the [#goreleaser](https://gophers.slack.com/messages/goreleaser/) channel in the [Gophers Slack](https://invite.slack.golangbridge.org/). -# Table of contents +Don't forget to check the [documentation](https://goreleaser.com). -- [Introduction](#introduction) -- [Quick start](#quick-start) -- [Environment setup](#environment-setup) -- [Release customization](#release-customization) -- [Integration with CI](#integration-with-ci) - -## Introduction - -GoReleaser is a release automation tool for Golang projects, the goal is to simplify the build, release and publish steps while providing variant customization options for all steps. - -GoReleaser is built for CI tools; you only need to [download and execute it](#integration-with-ci) in your build script. -You can [customize](#release-customization) your release process by createing a `.goreleaser.yml` file. -We are also working on integrating with package managers, we currently support Home -. - -The idea started with a [simple shell script](https://github.com/goreleaser/old-go-releaser), but it quickly became more complex and I also wanted to publish binaries via Homebrew taps. - -## Quick start - -In this example we will build, archive and release a Golang project. -Create a GitHub repository and add a single main package: -```go -// main.go -package main - -func main() { - println("Ba dum, tss!") -} -``` - -By default GoReleaser will build the current directory, but you can change the build package path in the GoReleaser configuration file. - -```yml -# .goreleaser.yml -# Build customization -builds: - - binary: drum-roll - goos: - - windows - - darwin - - linux - goarch: - - amd64 -``` - -PS: Invalid GOOS/GOARCH combinations will automatically be skipped. - -This configuration specifies the build operating systems to Windows, Linux and MacOS using 64bit architecture, the name of the binaries is `drum-roll`. - -GoReleaser will then archive the result binaries of each Os/Arch into a separate file. The default format is `{{.ProjectName}}_{{.Os}}_{{.Arch}}`. -You can change the archives name and format. You can also replace the OS and the Architecture with your own. -Another useful feature is to add files to archives, this is very useful for integrating assets like resource files. - -```yml -# .goreleaser.yml -# Build customization -builds: - - main: main.go - binary: drum-roll - goos: - - windows - - darwin - - linux - goarch: - - amd64 -# Archive customization -archive: - format: tar.gz - replacements: - amd64: 64-bit - darwin: macOS - linux: Tux - files: - - drum-roll.licence.txt -``` - -This configuration will generate tar archives, contains an additional file `drum-roll.licence.txt`, the archives will be located in: - -- `./dist/drum-roll_windows_64-bit.tar.gz` -- `./dist/drum-roll_macOS_64-bit.tar.gz` -- `./dist/drum-roll_Tux_64-bit.tar.gz` - -Next export a `GITHUB_TOKEN` environment variable with the `repo` scope selected. This will be used to deploy releases to your GitHub repository. Create yours [here](https://github.com/settings/tokens/new). - -```console -$ export GITHUB_TOKEN=`YOUR_TOKEN` -``` - -GoReleaser uses the latest [Git tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging) of your repository. -Create a tag and push it to GitHub: - -```console -$ git tag -a v0.1.0 -m "First release" && git push origin v0.1.0 -``` - -**Note**: we recommend the use of [semantic versioning](http://semver.org/). We -are not enforcing it though. We do remove the `v` prefix and then enforce -that the next character is a number. So, `v0.1.0` and `0.1.0` are virtually the -same and are both accepted, while `version0.1.0` is not. - -If you don't want to create a tag yet but instead simply create a package based on the latest commit, then you can also use the `--snapshot` flag. - -Now you can run GoReleaser at the root of your repository: - -```console -$ goreleaser -``` - -That's it! Check your GitHub project's release page. -The release should look like this: - -[![image](https://cloud.githubusercontent.com/assets/245435/23342061/fbcbd506-fc31-11e6-9d2b-4c1b776dee9c.png) -](https://github.com/goreleaser/goreleaser/releases) - -## Environment setup - -### GitHub Token - -GoReleaser requires a GitHub API token with the `repo` scope checked to deploy the artefacts to GitHub. You can create one [here](https://github.com/settings/tokens/new). -This token should be added to the environment variables as `GITHUB_TOKEN`. Here is how to do it with Travis CI: [Defining Variables in Repository Settings](https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings). - -### A note about `main.version` - -GoReleaser always sets a `main.version` ldflag. You can use it in your -`main.go` file: - -```go -package main - -var version = "master" - -func main() { - println(version) -} -``` - -`version` will be the current Git tag (with `v` prefix stripped) or the name of the snapshot if you're using the `--snapshot` flag. - -## GoReleaser customization - -GoReleaser provides multiple customizations via the `.goreleaser.yml` file. -You can generate it by running `goreleaser init` or start from scratch. The -defaults are sensible and fit for most projects. - -We'll cover all customizations available bellow: - -### Project name - -```yml -# .goreleaser.yml -# The name of the project. It is used in the name of the brew formula, archives, -# etc. Defaults to the name of the git project. -project_name: myproject -``` - -### Build customization - -```yml -# .goreleaser.yml -builds: - # You can have multiple builds, its a common yaml list - - - # Path to main.go file or main package. - # Default is `.` - main: ./cmd/main.go - - # Name of the binary. - # Default is the name of the project directory. - binary: program - - # Custom build tags. - # Default is empty - flags: -tags dev - - # Custom ldflags template. - # This is parsed with Golang template engine and the following variables - # are available: - # - Date - # - Commit - # - Tag - # - Version (Tag with the `v` prefix stripped) - # The default is `-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}` - # Date format is `2006-01-02_15:04:05` - ldflags: -s -w -X main.build={{.Version}} - - # Custom environment variables to be set durign the builds. - # Default is empty - env: - - CGO_ENABLED=0 - - # GOOS list to build in. - # For more info refer to https://golang.org/doc/install/source#environment - # Defaults are darwin and linux - goos: - - freebsd - - windows - - # GOARCH to build in. - # For more info refer to https://golang.org/doc/install/source#environment - # Defaults are 386 and amd64 - goarch: - - amd64 - - arm - - arm64 - - # GOARM to build in when GOARCH is arm. - # For more info refer to https://golang.org/doc/install/source#environment - # Defaults are 6 - goarm: - - 6 - - 7 - - # List of combinations of GOOS + GOARCH + GOARM to ignore. - # Default is empty. - ignore: - - goos: darwin - goarch: 386 - - goos: linux - goarch: arm - goarm: 7 - - # Hooks can be used to customize the final binary, for example, to run - # generator or whatever you want. - # Default is both hooks empty. - hooks: - pre: rice embed-go - post: ./script.sh -``` - -### Archive customization - -```yml -# .goreleaser.yml -archive: - # You can change the name of the archive. - # This is parsed with Golang template engine and the following variables - # are available: - # - ProjectName - # - Tag - # - Version (Tag with the `v` prefix stripped) - # - Os - # - Arch - # - Arm (ARM version) - # The default is `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}` - name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" - - # Archive format. Valid options are `tar.gz`, `zip` and `binary`. - # If format is `binary` no archives are created and the binaries are instead uploaded directly. - # In that case name_template the below specified files are ignored. - # Default is `tar.gz` - format: zip - - # Can be used to archive on different formats for specific GOOSs. - # Most common use case is to archive as zip on Windows. - # Default is empty - format_overrides: - - goos: windows - format: zip - - # Replacements for GOOS and GOARCH on the archive name. - # The keys should be valid GOOS or GOARCH values followed by your custom - # replacements. - replacements: - amd64: 64-bit - 386: 32-bit - darwin: macOS - linux: Tux - - # Additional files/globs you want to add to the archive. - # Defaults are any files matching `LICENCE*`, `LICENSE*`, - # `README*` and `CHANGELOG*` (case-insensitive) - files: - - LICENSE.txt - - README.md - - CHANGELOG.md - - docs/* - - design/*.png -``` - -### Release customization - -```yml -# .goreleaser.yml -release: - # Repo in which the release will be created. - # Default is extracted from the origin remote URL. - github: - owner: user - name: repo - - # If set to true, will not auto-publish the release. - # Default is false - draft: true -``` - -You can also specify a release notes file in markdown format using the -`--release-notes` flag. - -### Snapshot customization - -```yml -# .goreleaser.yml -snapshot: - # Allows you to change the name of the generated snapshot - # releases. The following variables are available: - # - Commit - # - Tag - # - Timestamp - # Default: SNAPSHOT-{{.Commit}} - name_template: SNAPSHOT-{{.Commit}} -``` - -### Checksums file customization - -```yml -# .goreleaser.yml -checksum: - # You can change the name of the checksums file. - # This is parsed with Golang template engine and the following variables - # are available: - # - ProjectName - # - Tag - # - Version (Tag with the `v` prefix stripped) - # The default is `{{ .ProjectName }}_{{ .Version }}_checksums.txt` - name_template: "{{ .ProjectName }}_checksums.txt" -``` - -### Homebrew tap customization - -The brew section specifies how the formula should be created. -Check [the Homebrew documentation](https://github.com/Homebrew/brew/blob/master/docs/How-to-Create-and-Maintain-a-Tap.md) and the [formula cookbook](https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md) for details. - -```yml -# .goreleaser.yml -brew: - # Reporitory to push the tap to. - github: - owner: user - name: homebrew-tap - - # Folder inside the repository to put the formula. - # Default is the root folder. - folder: Formula - - # Caveats for the user of your binary. - # Default is empty. - caveats: "How to use this binary" - - # Your app's homepage - # Default is empty - homepage: "https://example.com/" - - # Your app's description - # Default is empty - description: "Software to create fast and easy drum rolls." - - # Dependencies of your package - dependencies: - - git - - zsh - - # Packages that conflict with your package - conflicts: - - svn - - bash - - # Packages that run as a service. Default is empty. - plist: | - - ... - - # So you can brew test your formula. Default is empty. - test: | - system "#{bin}/program --version" - ... - - # Custom install script for brew. Default is 'bin.install "program"' - install: | - bin.install "program" - ... -``` - -By defining the `brew` section, GoReleaser will take care of publishing the Homebrew tap. -Assuming that the current tag is `v1.2.3`, the above config will generate a `program.rb` formula in the `Formula` folder of `user/homebrew-tap` repository: - -```rb -class Program < Formula - desc "How to use this binary" - homepage "https://github.com/user/repo" - url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_macOs_64bit.zip" - version "v1.2.3" - sha256 "9ee30fc358fae8d248a2d7538957089885da321dca3f09e3296fe2058e7fff74" - - depends_on "git" - depends_on "zsh" - - def install - bin.install "program" - end -end -``` - -Note that GoReleaser does not yet generate a valid homebrew-core formula. The generated formulas -are meant to be published as [homebrew taps](https://docs.brew.sh/brew-tap.html), not in any -of the official homebrew repositories. - -### FPM build customization - -GoReleaser can be wired to [fpm]() to generate `.deb`, `.rpm` and other archives. Check its -[wiki](https://github.com/jordansissel/fpm/wiki) for more info. - -[fpm]: https://github.com/jordansissel/fpm - -```yml -# .goreleaser.yml -fpm: - # Your app's vendor - # Default is empty - vendor: Drum Roll Inc. - # Your app's homepage - # Default is empty - homepage: https://example.com/ - - # Your app's maintainer (probably you) - # Default is empty - maintainer: Drummer - - # Your app's description - # Default is empty - description: Software to create fast and easy drum rolls. - - # Your app's license - # Default is empty - license: Apache 2.0 - - # Formats to generate as output - formats: - - deb - - rpm - - # Dependencies of your package - dependencies: - - git - - zsh - - # Packages that conflict with your package - conflicts: - - svn - - bash - - # Files or directories to add to your package (beyond the binary) - files: - "scripts/etc/init.d/": "/etc/init.d" - -``` - -Note that GoReleaser will not install `fpm` nor any of its dependencies for you. - -### Snapcraft build customization - -GoReleaser can generate `snap` packages. [Snaps](http://snapcraft.io/) are a new packaging format that will let you publish your project directly to the Ubuntu store. From there it will be installable in all the [supported Linux distros](https://snapcraft.io/docs/core/install), with automatic and transactional updates. - -You can read more about it in the [snapcraft docs](https://snapcraft.io/docs/). - -```yml -# .goreleaser.yml -snapcraft: - - # The name of the snap. This is optional and defaults to the project name. - name: drumroll - - # Single-line elevator pitch for your amazing snap. - # 79 char long at most. - summary: Software to create fast and easy drum rolls. - - # This the description of your snap. You have a paragraph or two to tell the - # most important story about your snap. Keep it under 100 words though, - # we live in tweetspace and your description wants to look good in the snap - # store. - description: | - This is the best drum roll application out there. - Install it and awe! - - # A guardrail to prevent you from releasing a snap to all your users before - # it is ready. - # `devel` will let you release only to the `edge` and `beta` channels in the - # store. `stable` will let you release also to the `candidate` and `stable` - # channels. More info about channels here: - # https://snapcraft.io/docs/reference/channels. - grade: stable - - # Snaps can be setup to follow three different confinement policies: - # `strict`, `devmode` and `classic`. A strict confinement where the snap - # can only read and write in its own namespace is recommended. Extra - # permissions for strict snaps can be declared as `plugs` for the app, which - # are explained later. More info about confinement here: - # https://snapcraft.io/docs/reference/confinement). - confinement: strict - - # Each binary built by GoReleaser is an app inside the snap. In this section - # you can declare extra details for those binaries. It is optional. - apps: - - # The name of the app must be the same name of the binary built. - drumroll: - - # If your app requires extra permissions to work outside of its default - # confined space, delcare them here. - # You can read the documentation about the available plugs and the - # things they allow: - # https://snapcraft.io/docs/reference/interfaces). - plugs: ["home", "network"] - - # If you want your app to be autostarted and to always run in the - # background, you can make it a simple daemon. - daemon: simple -``` - -Note that GoReleaser will not install `snapcraft` nor any of its dependencies for you. - -### Custom release notes - -You can have a markdown file previously created with the release notes, and -pass it down to goreleaser with the `--release-notes=FILE` flag. - -## Integration with CI - -You may want to wire this to auto-deploy your new tags on [Travis](https://travis-ci.org), for example: - -```yaml -# .travis.yml -after_success: - - test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash -``` - -Here is how to do it with [CircleCI](https://circleci.com): - -```yml -# circle.yml -deployment: - tag: - tag: /v[0-9]+(\.[0-9]+)*(-.*)*/ - owner: user - commands: - - curl -sL https://git.io/goreleaser | bash -``` - -*Note that if you test multiple versions or multiple OSes you probably want to make sure GoReleaser is just run once* +--- ### Stargazers over time diff --git a/docs/000-introduction.md b/docs/000-introduction.md new file mode 100644 index 000000000..f9e9c47fa --- /dev/null +++ b/docs/000-introduction.md @@ -0,0 +1,14 @@ +--- +title: Introduction +--- + +GoReleaser is a release automation tool for Golang projects, the goal is to simplify the build, release and publish steps while providing variant customization options for all steps. + +GoReleaser is built for CI tools; you only need to [download and execute it](#integration-with-ci) in your build script. +You can [customize](#release-customization) your release process by createing a `.goreleaser.yml` file. + +The idea started with a +[simple shell script](https://github.com/goreleaser/old-go-releaser), +but it quickly became more complex and I also wanted to publish binaries via +Homebrew taps, which would made the script even more hacky, so I let go of +that and rewrote the whole thing in Go. diff --git a/docs/010-quick-start.md b/docs/010-quick-start.md new file mode 100644 index 000000000..44fc08d2f --- /dev/null +++ b/docs/010-quick-start.md @@ -0,0 +1,113 @@ +--- +title: Quick Start +--- + +In this example we will build, archive and release a Golang project. +Create a GitHub repository and add a single main package: + +```go +// main.go +package main + +func main() { + println("Ba dum, tss!") +} +``` + +By default GoReleaser will build the current directory, but you can change +the build package path in the GoReleaser configuration file. + +```yml +# .goreleaser.yml +# Build customization +builds: + - binary: drum-roll + goos: + - windows + - darwin + - linux + goarch: + - amd64 +``` + +PS: Invalid GOOS/GOARCH combinations will automatically be skipped. + +This configuration specifies the build operating systems to Windows, Linux and +MacOS using 64bit architecture, the name of the binaries is `drum-roll`. + +GoReleaser will then archive the result binaries of each Os/Arch into a +separate file. The default format is `{{.ProjectName}}_{{.Os}}_{{.Arch}}`. +You can change the archives name and format. You can also replace the OS +and the Architecture with your own. +Another useful feature is to add files to archives, this is very useful for +integrating assets like resource files. + +```yml +# .goreleaser.yml +# Build customization +builds: + - main: main.go + binary: drum-roll + goos: + - windows + - darwin + - linux + goarch: + - amd64 +# Archive customization +archive: + format: tar.gz + replacements: + amd64: 64-bit + darwin: macOS + linux: Tux + files: + - drum-roll.licence.txt +``` + +This configuration will generate tar archives, containing an additional +file called `drum-roll.licence.txt`. The archives will be located in the `dist`` +folder: + +- `./dist/drum-roll_windows_64-bit.tar.gz` +- `./dist/drum-roll_macOS_64-bit.tar.gz` +- `./dist/drum-roll_Tux_64-bit.tar.gz` + +Next export a `GITHUB_TOKEN` environment variable with the `repo` scope +selected. This will be used to deploy releases to your GitHub repository. +Create yours [here](https://github.com/settings/tokens/new). + +```console +$ export GITHUB_TOKEN=`YOUR_TOKEN` +``` + +GoReleaser uses the latest +[Git tag](https://git-scm.com/book/en/v2/Git-Basics-Tagging) of your repository. +Create a tag and push it to GitHub: + +```console +$ git tag -a v0.1.0 -m "First release" +$ git push origin v0.1.0 +``` + +**Note**: @e recommend the use of [semantic versioning](http://semver.org/). We +are not enforcing it though. We do remove the `v` prefix and then enforce +that the next character is a number. So, `v0.1.0` and `0.1.0` are virtually the +same and are both accepted, while `version0.1.0` is not. + +If you don't want to create a tag yet but instead simply create a package +based on the latest commit, then you can also use the `--snapshot` flag. + +Now you can run GoReleaser at the root of your repository: + +```console +$ goreleaser +``` + +That's it! Check your GitHub project's release page. +The release should look like this: + + + + diff --git a/docs/020-environment.md b/docs/020-environment.md new file mode 100644 index 000000000..720f28690 --- /dev/null +++ b/docs/020-environment.md @@ -0,0 +1,33 @@ +--- +title: Environment Setup +--- + +### GitHub Token + +GoReleaser requires a GitHub API token with the `repo` scope checked to +deploy the artefacts to GitHub. You can create one +[here](https://github.com/settings/tokens/new). + +This token should be added to the environment variables as `GITHUB_TOKEN`. +Here is how to do it with Travis CI: +[Defining Variables in Repository Settings](https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings). + +### A note about `main.version` + +GoReleaser always sets a `main.version` ldflag. You can use it in your +`main.go` file: + +```go +package main + +var version = "master" + +func main() { + println(version) +} +``` + +`version` will be the current Git tag (with `v` prefix stripped) or the name of +the snapshot if you're using the `--snapshot` flag. + +You can override this by changing the `ldflags` option in the `build` section. diff --git a/docs/030-customization.md b/docs/030-customization.md new file mode 100644 index 000000000..cddd28e8e --- /dev/null +++ b/docs/030-customization.md @@ -0,0 +1,9 @@ +--- +title: Customization +--- + +GoReleaser provides multiple customizations via the `.goreleaser.yml` file. +You can generate it by running `goreleaser init` or start from scratch. The +defaults are sensible and fit for most projects. + +We'll cover all customizations available bellow. diff --git a/docs/040-project.md b/docs/040-project.md new file mode 100644 index 000000000..20b185c24 --- /dev/null +++ b/docs/040-project.md @@ -0,0 +1,12 @@ +--- +title: Custom project name +--- + +The project name is used in the name of the brew formula, archives, etc. +If none is given, it will be infered from the name of the git project. + + +```yaml +# .goreleaser.yml +project_name: myproject +``` diff --git a/docs/050-build.md b/docs/050-build.md new file mode 100644 index 000000000..95c3d9d30 --- /dev/null +++ b/docs/050-build.md @@ -0,0 +1,80 @@ +--- +title: Custom builds +--- + +Builds can be customized in multiple ways. You can change which `GOOS` and +`GOARCH` would be built, the name of the binary, flags, ldflags, hooks and etc. + +Here is a full commented `builds` section: + +```yml +# .goreleaser.yml +builds: + # You can have multiple builds defined as a common yaml list + - + # Path to main.go file or main package. + # Default is `.` + main: ./cmd/main.go + + # Name of the binary. + # Default is the name of the project directory. + binary: program + + # Custom build tags. + # Default is empty + flags: -tags dev + + # Custom ldflags template. + # This is parsed with Golang template engine and the following variables + # are available: + # - Date + # - Commit + # - Tag + # - Version (Tag with the `v` prefix stripped) + # The default is `-s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}}` + # Date format is `2006-01-02_15:04:05` + ldflags: -s -w -X main.build={{.Version}} + + # Custom environment variables to be set durign the builds. + # Default is empty + env: + - CGO_ENABLED=0 + + # GOOS list to build in. + # For more info refer to https://golang.org/doc/install/source#environment + # Defaults are darwin and linux + goos: + - freebsd + - windows + + # GOARCH to build in. + # For more info refer to https://golang.org/doc/install/source#environment + # Defaults are 386 and amd64 + goarch: + - amd64 + - arm + - arm64 + + # GOARM to build in when GOARCH is arm. + # For more info refer to https://golang.org/doc/install/source#environment + # Defaults are 6 + goarm: + - 6 + - 7 + + # List of combinations of GOOS + GOARCH + GOARM to ignore. + # Default is empty. + ignore: + - goos: darwin + goarch: 386 + - goos: linux + goarch: arm + goarm: 7 + + # Hooks can be used to customize the final binary, for example, to run + # generator or whatever you want. + # Default is both hooks empty. + hooks: + pre: rice embed-go + post: ./script.sh +``` diff --git a/docs/060-archive.md b/docs/060-archive.md new file mode 100644 index 000000000..4fbed0d01 --- /dev/null +++ b/docs/060-archive.md @@ -0,0 +1,57 @@ +--- +title: Custom archiving +--- + +The binaries built will be archived within the README and LICENSE files into a +`tar.gz` file. In the `archive` section you can customize the archive name, +files, and format. + +Here is a full commented `archive` section: + +```yml +# .goreleaser.yml +archive: + # You can change the name of the archive. + # This is parsed with Golang template engine and the following variables + # are available: + # - ProjectName + # - Tag + # - Version (Tag with the `v` prefix stripped) + # - Os + # - Arch + # - Arm (ARM version) + # The default is `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}` + name_template: "{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}" + + # Archive format. Valid options are `tar.gz`, `zip` and `binary`. + # If format is `binary` no archives are created and the binaries are instead uploaded directly. + # In that case name_template the below specified files are ignored. + # Default is `tar.gz` + format: zip + + # Can be used to archive on different formats for specific GOOSs. + # Most common use case is to archive as zip on Windows. + # Default is empty + format_overrides: + - goos: windows + format: zip + + # Replacements for GOOS and GOARCH on the archive name. + # The keys should be valid GOOS or GOARCH values followed by your custom + # replacements. + replacements: + amd64: 64-bit + 386: 32-bit + darwin: macOS + linux: Tux + + # Additional files/globs you want to add to the archive. + # Defaults are any files matching `LICENCE*`, `LICENSE*`, + # `README*` and `CHANGELOG*` (case-insensitive) + files: + - LICENSE.txt + - README.md + - CHANGELOG.md + - docs/* + - design/*.png +``` diff --git a/docs/070-checksum.md b/docs/070-checksum.md new file mode 100644 index 000000000..bce44a3e1 --- /dev/null +++ b/docs/070-checksum.md @@ -0,0 +1,22 @@ +--- +title: Custom checksum +--- + +GoRelease generates a `project_1.0.0_checksums.txt` and uploads it to the +release as well, so your users can validate if the downloaded files are +right. + +The `checksum` section allows the customization of the filename: + +```yml +# .goreleaser.yml +checksum: + # You can change the name of the checksums file. + # This is parsed with Golang template engine and the following variables + # are available: + # - ProjectName + # - Tag + # - Version (Tag with the `v` prefix stripped) + # The default is `{{ .ProjectName }}_{{ .Version }}_checksums.txt` + name_template: "{{ .ProjectName }}_checksums.txt" +``` diff --git a/docs/080-snapshots.md b/docs/080-snapshots.md new file mode 100644 index 000000000..f168d7e84 --- /dev/null +++ b/docs/080-snapshots.md @@ -0,0 +1,20 @@ +--- +title: Snapshots +--- + +Sometimes we want to generate a full build of our project for some reason, +but don't want to validate anything nor upload it to anywhere. +GoRelease supports this with a `--snapshot` flag and with a `snapshot` +customization section as well. + +```yml +# .goreleaser.yml +snapshot: + # Allows you to change the name of the generated snapshot + # releases. The following variables are available: + # - Commit + # - Tag + # - Timestamp + # Default: SNAPSHOT-{{.Commit}} + name_template: SNAPSHOT-{{.Commit}} +``` diff --git a/docs/100-fpm.md b/docs/100-fpm.md new file mode 100644 index 000000000..5df9f32d9 --- /dev/null +++ b/docs/100-fpm.md @@ -0,0 +1,51 @@ +--- +title: Custom linux packages +--- + +GoReleaser can be wired to [fpm](https://github.com/jordansissel/fpm) to generate `.deb`, `.rpm` and other archives. Check its +[wiki](https://github.com/jordansissel/fpm/wiki) for more info. + +```yml +# .goreleaser.yml +fpm: + # Your app's vendor + # Default is empty + vendor: Drum Roll Inc. + # Your app's homepage + # Default is empty + homepage: https://example.com/ + + # Your app's maintainer (probably you) + # Default is empty + maintainer: Drummer + + # Your app's description + # Default is empty + description: Software to create fast and easy drum rolls. + + # Your app's license + # Default is empty + license: Apache 2.0 + + # Formats to generate as output + formats: + - deb + - rpm + + # Dependencies of your package + dependencies: + - git + - zsh + + # Packages that conflict with your package + conflicts: + - svn + - bash + + # Files or directories to add to your package (beyond the binary) + files: + "scripts/etc/init.d/": "/etc/init.d" + +``` + +Note that GoReleaser will not install `fpm` nor any of its dependencies for you. diff --git a/docs/110-snapcraft.md b/docs/110-snapcraft.md new file mode 100644 index 000000000..31bf60f3c --- /dev/null +++ b/docs/110-snapcraft.md @@ -0,0 +1,63 @@ +--- +title: Snapcraft +--- + +GoReleaser can generate `snap` packages. [Snaps](http://snapcraft.io/) are a new packaging format that will let you publish your project directly to the Ubuntu store. From there it will be installable in all the [supported Linux distros](https://snapcraft.io/docs/core/install), with automatic and transactional updates. + +You can read more about it in the [snapcraft docs](https://snapcraft.io/docs/). + +```yml +# .goreleaser.yml +snapcraft: + + # The name of the snap. This is optional and defaults to the project name. + name: drumroll + + # Single-line elevator pitch for your amazing snap. + # 79 char long at most. + summary: Software to create fast and easy drum rolls. + + # This the description of your snap. You have a paragraph or two to tell the + # most important story about your snap. Keep it under 100 words though, + # we live in tweetspace and your description wants to look good in the snap + # store. + description: | + This is the best drum roll application out there. + Install it and awe! + + # A guardrail to prevent you from releasing a snap to all your users before + # it is ready. + # `devel` will let you release only to the `edge` and `beta` channels in the + # store. `stable` will let you release also to the `candidate` and `stable` + # channels. More info about channels here: + # https://snapcraft.io/docs/reference/channels. + grade: stable + + # Snaps can be setup to follow three different confinement policies: + # `strict`, `devmode` and `classic`. A strict confinement where the snap + # can only read and write in its own namespace is recommended. Extra + # permissions for strict snaps can be declared as `plugs` for the app, which + # are explained later. More info about confinement here: + # https://snapcraft.io/docs/reference/confinement). + confinement: strict + + # Each binary built by GoReleaser is an app inside the snap. In this section + # you can declare extra details for those binaries. It is optional. + apps: + + # The name of the app must be the same name of the binary built. + drumroll: + + # If your app requires extra permissions to work outside of its default + # confined space, delcare them here. + # You can read the documentation about the available plugs and the + # things they allow: + # https://snapcraft.io/docs/reference/interfaces). + plugs: ["home", "network"] + + # If you want your app to be autostarted and to always run in the + # background, you can make it a simple daemon. + daemon: simple +``` + +Note that GoReleaser will not install `snapcraft` nor any of its dependencies for you. diff --git a/docs/115-release.md b/docs/115-release.md new file mode 100644 index 000000000..10ae7e288 --- /dev/null +++ b/docs/115-release.md @@ -0,0 +1,30 @@ +--- +title: Custom releasing +--- + +GoRelease will create a release in GitHub with the current tag, upload all +the archives and checksums, also generating a changelog from the commit +log between the current and previous tags. + +Let's see what can be customized in the `release` section: + +```yml +# .goreleaser.yml +release: + # Repo in which the release will be created. + # Default is extracted from the origin remote URL. + github: + owner: user + name: repo + + # If set to true, will not auto-publish the release. + # Default is false + draft: true +``` + +## Custom release notes + +You can have a markdown file previously created with the release notes, and +pass it down to goreleaser with the `--release-notes=FILE` flag. +GoReleaser will then skip its own release notes generation, +using the contents of your file instead. diff --git a/docs/120-homebrew.md b/docs/120-homebrew.md new file mode 100644 index 000000000..183cd3dca --- /dev/null +++ b/docs/120-homebrew.md @@ -0,0 +1,90 @@ +--- +title: Custom homebrew tap +--- + +After releasing to GitHub, GoReleaser can generate and publish a homebrew-tap +recipe into a repository that you have access to. + +The brew section specifies how the formula should be created. +You can check the +[Homebrew documentation](https://github.com/Homebrew/brew/blob/master/docs/How-to-Create-and-Maintain-a-Tap.md) +and the +[formula cookbook](https://github.com/Homebrew/brew/blob/master/docs/Formula-Cookbook.md) +for more details. + +```yml +# .goreleaser.yml +brew: + # Reporitory to push the tap to. + github: + owner: user + name: homebrew-tap + + # Folder inside the repository to put the formula. + # Default is the root folder. + folder: Formula + + # Caveats for the user of your binary. + # Default is empty. + caveats: "How to use this binary" + + # Your app's homepage + # Default is empty + homepage: "https://example.com/" + + # Your app's description + # Default is empty + description: "Software to create fast and easy drum rolls." + + # Dependencies of your package + dependencies: + - git + - zsh + + # Packages that conflict with your package + conflicts: + - svn + - bash + + # Packages that run as a service. Default is empty. + plist: | + + ... + + # So you can brew test your formula. Default is empty. + test: | + system "#{bin}/program --version" + ... + + # Custom install script for brew. Default is 'bin.install "program"' + install: | + bin.install "program" + ... +``` + +By defining the `brew` section, GoReleaser will take care of publishing the +Homebrew tap. +Assuming that the current tag is `v1.2.3`, the above config will generate a +`program.rb` formula in the `Formula` folder of `user/homebrew-tap` repository: + +```rb +class Program < Formula + desc "How to use this binary" + homepage "https://github.com/user/repo" + url "https://github.com/user/repo/releases/download/v1.2.3/program_v1.2.3_macOs_64bit.zip" + version "v1.2.3" + sha256 "9ee30fc358fae8d248a2d7538957089885da321dca3f09e3296fe2058e7fff74" + + depends_on "git" + depends_on "zsh" + + def install + bin.install "program" + end +end +``` + +**Important**": Note that GoReleaser does not yet generate a valid +homebrew-core formula. The generated formulas are meant to be published as +[homebrew taps](https://docs.brew.sh/brew-tap.html), and in their current +form will not be accepted in any of the official homebrew repositories. diff --git a/docs/140-ci.md b/docs/140-ci.md new file mode 100644 index 000000000..030c31669 --- /dev/null +++ b/docs/140-ci.md @@ -0,0 +1,25 @@ +--- +title: CI integration +--- + +You may want to wire this to auto-deploy your new tags on [Travis](https://travis-ci.org), for example: + +```yaml +# .travis.yml +after_success: + - test -n "$TRAVIS_TAG" && curl -sL https://git.io/goreleaser | bash +``` + +Here is how to do it with [CircleCI](https://circleci.com): + +```yml +# circle.yml +deployment: + tag: + tag: /v[0-9]+(\.[0-9]+)*(-.*)*/ + owner: user + commands: + - curl -sL https://git.io/goreleaser | bash +``` + +*Note that if you test multiple versions or multiple OSes you probably want to make sure GoReleaser is just run once* diff --git a/docs/999-links.md b/docs/999-links.md new file mode 100644 index 000000000..5503eab79 --- /dev/null +++ b/docs/999-links.md @@ -0,0 +1,13 @@ +--- +title: Links +--- + +- Follow the progress on [GitHub repository](https://github.com/goreleaser/goreleaser) +- Follow [@caarlos0](https://twitter.com/caarlos0) on Twitter for updates +- [Slack](https://gophers.slack.com/messages/goreleaser/) to chat about GoReleaser, +quetions and etc. Join using [this link](https://invite.slack.golangbridge.org/). +- [Contributing Guidelines](https://github.com/goreleaser/goreleaser/blob/master/CONTRIBUTING.md) + +This project adheres to the Contributor Covenant +[code of conduct](https://github.com/goreleaser/goreleaser/blob/master/CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. From 6c4ad8b783fb919b0c7cbbe559226ffeae2eca2c Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 10 Sep 2017 21:11:37 -0300 Subject: [PATCH 2/4] using the next branch --- Makefile | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 0fac070f9..007564e7f 100644 --- a/Makefile +++ b/Makefile @@ -47,8 +47,22 @@ ci: test lint build: go build +HIGHLIGHT=https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0 + # Generate the static documentation static: - @static-docs -in docs -out ../goreleaser.github.io -title GoReleaser -subtitle "Deliver Go binaries as fast and easily as possible" + @static-docs \ + --in docs \ + --out ../goreleaser.github.io \ + --title GoReleaser \ + --subtitle "Deliver Go binaries as fast and easily as possible" \ + --google UA-106198408-1 \ + --script "$(HIGHLIGHT)/highlight.min.js" \ + --script "$(HIGHLIGHT)/languages/go.min.js" \ + --script "$(HIGHLIGHT)/languages/yaml.min.js" \ + --style "$(HIGHLIGHT)/styles/atom-one-dark.min.css" \ + --inline-script 'hljs.initHighlightingOnLoad();' \ + --inline-style 'pre { padding: 0; }' + .DEFAULT_GOAL := build From fb8c0ef925c1ca8360b5cf0f4eba44572ebfd3bc Mon Sep 17 00:00:00 2001 From: Carlos Alexandro Becker Date: Sun, 10 Sep 2017 21:11:53 -0300 Subject: [PATCH 3/4] icons --- docs/apple-touch-icon-144-precomposed.png | Bin 0 -> 6807 bytes docs/favicon.ico | Bin 0 -> 13094 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/apple-touch-icon-144-precomposed.png create mode 100644 docs/favicon.ico diff --git a/docs/apple-touch-icon-144-precomposed.png b/docs/apple-touch-icon-144-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..c1aefd7ad94d809e44f7fd106f58308a87648713 GIT binary patch literal 6807 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 literal 0 HcmV?d00001 diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..77b2a8e7f90fdeabbd5735aae295464527714764 GIT binary patch literal 13094 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 Date: Sun, 10 Sep 2017 21:35:18 -0300 Subject: [PATCH 4/4] readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c40bccb1..4b719fdd9 100644 --- a/README.md +++ b/README.md @@ -24,9 +24,10 @@ We appreciate your contribution. Please refer to our [contributing guidelines](C For questions join the [#goreleaser](https://gophers.slack.com/messages/goreleaser/) channel in the [Gophers Slack](https://invite.slack.golangbridge.org/). -Don't forget to check the [documentation](https://goreleaser.com). +## Documentation ---- +Documentation can be found in the [docs folder](docs) and live +at https://goreleaser.com ### Stargazers over time