<!--
Hi, thanks for contributing!
Please make sure you read our CONTRIBUTING guide.
Also, add tests and the respective documentation changes as well.
-->
<!-- If applied, this commit will... -->
This PR improves the handling of shared or static libraries by
GoReleaser. It uses the default behaviour of the Go compiler by
appending the right extension to libraries.
* `.so` and `.a` for Linux shared libraries and static libraries
respectively
* `.dylib` and `.a.` on Darwin
* `.dll` and `.lib` on Windows (pre-existent)
It does not add any configuration option to `.goreleaser.yml`, since it
leverages the existing `buildmode` flag.
Additionally, this PR takes care of adding the generated header file
into the archive.
<!-- Why is this change being made? -->
Personally I would leverage this change to release some software both as
a CLI and as a shared library. I believe others who use CGo or need
interoperability with Go from other languages could benefit from this.
<!-- # Provide links to any relevant tickets, URLs or other resources
-->
This was previously discussed in #3497.
I couldn't quite think of a proper way to add some tests to the header
archiving feature. Any recommendation?
* Trying to fix parallelism on multiple builds issue
https://github.com/goreleaser/goreleaser/issues/3209
* bugfixing
* Update internal/pipe/build/build_test.go
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Update internal/pipe/build/build_test.go
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* Update internal/pipe/build/build_test.go
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
* fix: gofumpt
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
Co-authored-by: JD <jdpcbs@gmail.com>
* feat: allow to override env for a target
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: dupe key
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: fixes
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
- on universal binaries, use the build id instead of the binary name to
create the folder in the dist folder
- on builds, default the id the to the binary name instead of project
name. The binary name already defaults to the project id if empty, so
this should only prevent having to specify the id + binary name in
some cases.
closes#3061
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: custom targets if missing goamd64, goarm, gomips
if the user provide custom targets without the goamd64, goarm or gomips bit, things may go awry at some point.
this prevents issues by suffixing them with the default when its missing.
closes https://github.com/goreleaser/goreleaser/issues/3055
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* test: fix build tests
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* feat: allow to override build flags by goos/goarch/etc
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* test: improve
* fix: typos
* feat: templates, merges
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* test: fix
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* test: one more case
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* Update internal/builders/golang/build.go
Co-authored-by: Brian Flad <bflad417@gmail.com>
* Update internal/builders/golang/build.go
Co-authored-by: Brian Flad <bflad417@gmail.com>
* test: more tests
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
Co-authored-by: Brian Flad <bflad417@gmail.com>
* refactor: improve build
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: coverage
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
Currently, the 'goVersion' function is run without any directory set.
This is problematic when a build uses the 'dir' config in combination
with the 'gobinary' config. When 'gobinary' is a relative path (like a
script in the current repository), goVersion silently fails, returning
an empty string.
This commit refactors 'goVersion' to execute the command with '.Dir' set
to the 'build.Dir', in addition to now returning an error, so that
issues may be bubbled up in the build log, rather than silently failing.
It also adds a new helper function to facilitate running 'goVersion' by
creating a temporary executable that outputs a given 'version' string.
This function is only currently used by 'TestWithDefaults'.
Co-authored-by: Rob Prentiss <prentiss@apple.com>
Saving again the full path of the binary in the artifact name, if needed, we can filepath.Base it and get the name only.
refs #2280closes#2311
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* Implemented build option output_path
* feat: output path renamed to dist_path
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: CR
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: binary name
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
Co-authored-by: Thomas Meckel <tmeckel@users.noreply.github.com>
* fix: default gomips
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: test
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* feat: add arm64 to the default goarch list
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use t.Cleanup instead of defer
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: filepath
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* feat: validate goos, goarch, goarm and gomips
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: lint
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
* refactor: use require on all tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* refactor: use require on all tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
* fix: builds.binary template
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: revert
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: tests
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
All tests share the same environment (hence variable namespace too)
and setting & reading the same variables has lead to race conditions
which are being fixed by using different variables in each test.
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
This helps in situations where hook couldn't run at all,
e.g. because of insufficient permissions.
Previously such failure would only be reported as
empty stdout/stderr output - this allows exposure
of the real root cause.
* fix: checksum pipe will not return an error when artifact list is empty
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
* new: build.skip option for libraries
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
* docs: update doc with build.skip option
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
* fix: non-templateable field as default build.id
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: added test for build.id
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: fixed test
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* feat: multiple archives
* fix: several things
* test: fixed
* fix: several things
* fix: archive id on the artifact
* fix: deprecated since
* docs: deprecations page improvements
* feat: templateable hooks
* test: improved test
* docs: docs about templateable hooks
* test: improve test
* test: skip test that only fails on travis