when building a go test without the `-c` flag like so:
```yaml
builds:
- command: test
binary: env.test
dir: ./internal/builders/golang
no_main_check: true
```
will result in the error: `exit status 1: fork/exec : exec format error`
adding the -c flags when not present in the flags
adding unit test
https://github.com/goreleaser/goreleaser/issues/4462
---------
Co-authored-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
- improves deprecation warning styles a bit so they caught the readers
eye faster and are easier to read
- warns if the user uses `builds.target` in conjunction with other
options which are ignored in that case
- improved env output
- improved no configuration found warning
some of the changes:
<img width="1263" alt="CleanShot 2023-07-24 at 21 38 41@2x"
src="https://github.com/goreleaser/goreleaser/assets/245435/40465853-7177-44d6-b07b-61b67590669a">
---------
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
We have been using `t.Setenv` is most of our tests. This PR replaces the
remaining `os.Setenv` with `t.Setenv`.
Reference: https://pkg.go.dev/testing#T.Setenv
```go
func TestFoo(t *testing.T) {
// before
os.Setenv(key, "new value")
defer os.Unsetenv(key)
// after
t.Setenv(key, "new value")
}
```
---------
Signed-off-by: Eng Zer Jun <engzerjun@gmail.com>
- log keys will be ordered as intended instead of sorted
- paths always relative to cwd
---------
Signed-off-by: Carlos Alexandro Becker <caarlos0@users.noreply.github.com>
alternative to #3806
the idea is that both `context.New` and `context.Context{}` are never
used in tests.
not sure yet how much I like it, so far code does look a bit more
readable though.
---------
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
GoReleaser evolved a lot since the last time I tried to implement this
>1 year ago.
Now its 100% possible, and way simpler to do it!
closes#3580
refs #2583
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
The replacements thing was always a bit weird, especially on archives.
We can solve that with templates, so, removing I'm deprecating it.
Also did the same on other places that had it the same feature.
Closes#3588
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
<!--
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?
* feat(ci): compile with go 1.19
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: fixing template test
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: improve check
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: more test and docs fixes
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: fix
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: fix
* test: fix
* fix: lint
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: docker templates
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: godoc for RequireTemplateError
* fix: build env overrides
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: review
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* test: fix
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.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>
* feat: replacing logs
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: tests et al
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* feat: update termenv/lipgloss
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* wip: output
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: pin dep
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: update
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: tests
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: tests
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: deps
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* fix: dep
Signed-off-by: Carlos A Becker <caarlos0@users.noreply.github.com>
* feat: add builds.no_main_check and builds.command
Added two more options to the builds section:
- command: allow to override the command being run. E.g. instead of
`go build`, one could run `go test -c` by setting gobinary, command
and flags, respectively.
- no_main_check: by default, goreleaser will fail if there's no main
function. This option allows to disable that check.
This PR effectively make GoReleaser able to release Go test binaries
instead of just "regular" binaries.
closes#3037
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* test: fix broken tests
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>
It was just allowing v2 and v3 due to some misreading on my side.
This commit fixes it to allow v1, v2, v3 and v4.
refs #3016
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: rename file
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: template main with gomod.proxy
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* refactor: put common extra keys in the artifact package
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* refactor: common extra fields have their own funcs
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* refactor: 2 more
Signed-off-by: Carlos A Becker <caarlos0@gmail.com>
* fix: review
Signed-off-by: Carlos A Becker <caarlos0@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>
* feat: support windows/arm64
closes#2404closes#2405
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: broken test
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* docs: deprecation warnings
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: main check when using gomod.proxy
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: main check when using gomod.proxy
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: fix
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: fix
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* fix: return an err with stdout/err when a command failed
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* chore: fmt
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>
* test: fixes
Signed-off-by: Carlos Alexandro Becker <caarlos0@gmail.com>