diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8e300039..193fcce6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -99,9 +99,19 @@ jobs: - uses: ruby/setup-ruby@v1 with: ruby-version: ruby + bundler-cache: false - - name: export CGO_CFLAGS - run: ruby -e "puts %Q(CGO_CFLAGS=-I#{RbConfig::CONFIG['rubyarchhdrdir']} -I#{RbConfig::CONFIG['rubyhdrdir']})" >> $GITHUB_ENV + # FIXME: setup-go installs cache in `vendor/` and setup-ruby installs cache in `vendor/bundle/` + # If we use the cache in setup-go and setup-ruby at the same time, this doesn't work well because they use the same directory. + # Therefore, the installation location needs to be changed from the setup-ruby default. + - name: bundle install + run: | + set -xe + bundle config --local path ruby-vendor/bundle + bundle install --jobs 4 + + - name: export CGO_CFLAGS for golangci-lint + run: bundle exec rake go:build_envs[CGO_CFLAGS] >> $GITHUB_ENV - run: echo $CGO_CFLAGS diff --git a/_gem/README.md b/_gem/README.md index 822ba0e1..4d497e7b 100644 --- a/_gem/README.md +++ b/_gem/README.md @@ -49,6 +49,7 @@ Following tasks are generated * `rake go:test` * `rake go:testrace` * `rake go:fmt` +* `rake go:build_envs` #### Example (With config) ```ruby @@ -68,6 +69,7 @@ Following tasks are generated * `rake go5:test` * `rake go5:testrace` * `rake go5:fmt` +* `rake go5:build_envs` #### Example (Add additional tasks) ```ruby @@ -89,6 +91,24 @@ namespace :go do end ``` +#### Example (Use [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action)) +```yml +jobs: + go-lint: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-go@v5 + - uses: ruby/setup-ruby@v1 + + - name: export CGO_CFLAGS for golangci-lint + run: bundle exec rake go:build_envs[CGO_CFLAGS] >> $GITHUB_ENV + + - name: Run golangci-lint + uses: golangci/golangci-lint-action@v6 +``` + #### Available configurations * `task_namespace` : task namespace (default: `:go`) * `go_bin_path` : path to go binary (default: `"go"`) diff --git a/_gem/lib/go_gem/rake_task.rb b/_gem/lib/go_gem/rake_task.rb index fac48924..cb90951d 100644 --- a/_gem/lib/go_gem/rake_task.rb +++ b/_gem/lib/go_gem/rake_task.rb @@ -86,6 +86,7 @@ def initialize(gem_name) define_go_test_task define_go_testrace_task define_go_fmt_task + define_go_build_envs_task end end @@ -168,5 +169,19 @@ def define_go_fmt_task end end end + + def define_go_build_envs_task + desc "Print build envs for `go build`" + task(:build_envs, [:env_name]) do |_, args| + if args[:env_name] + value = RakeTask.build_env_vars[args[:env_name]] + puts "#{args[:env_name]}=#{value}" + else + RakeTask.build_env_vars.each do |name, value| + puts "#{name}=#{value}" + end + end + end + end end end diff --git a/_gem/sig/go_gem/rake_task.rbs b/_gem/sig/go_gem/rake_task.rbs index a3c8d349..6ba95507 100644 --- a/_gem/sig/go_gem/rake_task.rbs +++ b/_gem/sig/go_gem/rake_task.rbs @@ -38,6 +38,8 @@ module GoGem def define_go_fmt_task: () -> void + def define_go_build_envs_task: () -> void + def within_target_dir: () { () -> void } -> void def ext_dir: () -> String diff --git a/_gem/sig/non-gemify/rake.rbs b/_gem/sig/non-gemify/rake.rbs index 4ce409d3..1b47b47a 100644 --- a/_gem/sig/non-gemify/rake.rbs +++ b/_gem/sig/non-gemify/rake.rbs @@ -1,3 +1,24 @@ +# Monkey path to https://github.com/ruby/gem_rbs_collection/blob/main/gems/rake/13.0/rake.rbs + +module Rake + class Task + end + + class TaskArguments + include Enumerable[untyped] + + def []: (untyped index) -> untyped + def each: () ?{ (untyped, untyped) -> void } -> void + end + + module DSL + private + + def task: (*untyped args) ?{ (Rake::Task, Rake::TaskArguments) -> void } -> void + | ... + end +end + module FileUtils def sh: (Hash[String, String] env, *String cmd, **untyped options) ?{ (bool, Process::Status) -> void } -> void | ... diff --git a/_gem/spec/go_gem/rake_task_spec.rb b/_gem/spec/go_gem/rake_task_spec.rb index fdc02f13..2a779b3a 100644 --- a/_gem/spec/go_gem/rake_task_spec.rb +++ b/_gem/spec/go_gem/rake_task_spec.rb @@ -17,6 +17,7 @@ it { should be_task_defined("go:test") } it { should be_task_defined("go:testrace") } it { should be_task_defined("go:fmt") } + it { should be_task_defined("go:build_envs") } describe "Add additional tasks" do include Rake::DSL