diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1e3cd897c..f3525a591 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -34,13 +34,13 @@ jobs: go-version-file: "go.mod" - name: Initialize CodeQL - uses: github/codeql-action/init@v3 + uses: github/codeql-action/init@v4 with: languages: ${{ matrix.language }} queries: security-and-quality - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v3 + uses: github/codeql-action/analyze@v4 with: category: "/language:${{ matrix.language }}" upload: false @@ -56,7 +56,7 @@ jobs: output: sarif-results/${{ matrix.language }}.sarif - name: Upload filtered SARIF - uses: github/codeql-action/upload-sarif@v3 + uses: github/codeql-action/upload-sarif@v4 with: sarif_file: sarif-results/${{ matrix.language }}.sarif category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index 09267a2d2..6cbef2275 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -50,7 +50,7 @@ jobs: with: go-version-file: 'go.mod' - name: Install GoReleaser - uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552 + uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a with: version: "~1.17.1" install-only: true @@ -62,7 +62,7 @@ jobs: run: | go run ./cmd/gen-docs --website --doc-path dist/manual tar -czvf dist/manual.tar.gz -C dist -- manual - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: linux if-no-files-found: error @@ -103,7 +103,7 @@ jobs: security set-key-partition-list -S "apple-tool:,apple:,codesign:" -s -k "$keychain_password" "$keychain" rm "$RUNNER_TEMP/cert.p12" - name: Install GoReleaser - uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552 + uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a with: version: "~1.17.1" install-only: true @@ -134,7 +134,7 @@ jobs: run: | shopt -s failglob script/pkgmacos "$TAG_NAME" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: macos if-no-files-found: error @@ -157,7 +157,7 @@ jobs: with: go-version-file: 'go.mod' - name: Install GoReleaser - uses: goreleaser/goreleaser-action@9c156ee8a17a598857849441385a2041ef570552 + uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a with: version: "~1.17.1" install-only: true @@ -238,7 +238,7 @@ jobs: Get-ChildItem -Path .\dist -Filter *.msi | ForEach-Object { .\script\sign.ps1 $_.FullName } - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v5 with: name: windows if-no-files-found: error @@ -256,7 +256,7 @@ jobs: - name: Checkout cli/cli uses: actions/checkout@v5 - name: Merge built artifacts - uses: actions/download-artifact@v5 + uses: actions/download-artifact@v6 - name: Checkout documentation site uses: actions/checkout@v5 with: @@ -309,7 +309,7 @@ jobs: rpmsign --addsign dist/*.rpm - name: Attest release artifacts if: inputs.environment == 'production' - uses: actions/attest-build-provenance@e8998f949152b193b063cb0ec769d69d929409be # v2.4.0 + uses: actions/attest-build-provenance@977bb373ede98d70efdf65b84cb5f73e068dcc2a # v3.0.0 with: subject-path: "dist/gh_*" - name: Run createrepo @@ -384,7 +384,7 @@ jobs: git diff --name-status @{upstream}.. fi - name: Bump homebrew-core formula - uses: mislav/bump-homebrew-formula-action@8e2baa47daaa8db10fcdeb04105dfa6850eb0d68 + uses: mislav/bump-homebrew-formula-action@56a283fa15557e9abaa4bdb63b8212abc68e655c if: inputs.environment == 'production' && !contains(inputs.tag_name, '-') with: formula-name: gh diff --git a/.github/workflows/govulncheck.yml b/.github/workflows/govulncheck.yml index 7cc113878..2f3d2705b 100644 --- a/.github/workflows/govulncheck.yml +++ b/.github/workflows/govulncheck.yml @@ -24,6 +24,6 @@ jobs: go run golang.org/x/vuln/cmd/govulncheck@d1f380186385b4f64e00313f31743df8e4b89a77 -format sarif ./... > gh.sarif - name: Upload SARIF report - uses: github/codeql-action/upload-sarif@9b02dc2f60288b463e7a66e39c78829b62780db7 # 2.22.1 + uses: github/codeql-action/upload-sarif@v4 with: sarif_file: gh.sarif diff --git a/.github/workflows/homebrew-bump.yml b/.github/workflows/homebrew-bump.yml index 0b42803aa..ff7f00393 100644 --- a/.github/workflows/homebrew-bump.yml +++ b/.github/workflows/homebrew-bump.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Bump homebrew-core formula - uses: mislav/bump-homebrew-formula-action@8e2baa47daaa8db10fcdeb04105dfa6850eb0d68 + uses: mislav/bump-homebrew-formula-action@56a283fa15557e9abaa4bdb63b8212abc68e655c if: inputs.environment == 'production' && !contains(inputs.tag_name, '-') with: formula-name: gh diff --git a/api/http_client.go b/api/http_client.go index 146b96df6..ab7d49063 100644 --- a/api/http_client.go +++ b/api/http_client.go @@ -17,22 +17,24 @@ type tokenGetter interface { } type HTTPClientOptions struct { - AppVersion string - CacheTTL time.Duration - Config tokenGetter - EnableCache bool - Log io.Writer - LogColorize bool - LogVerboseHTTP bool + AppVersion string + CacheTTL time.Duration + Config tokenGetter + EnableCache bool + Log io.Writer + LogColorize bool + LogVerboseHTTP bool + SkipDefaultHeaders bool } func NewHTTPClient(opts HTTPClientOptions) (*http.Client, error) { // Provide invalid host, and token values so gh.HTTPClient will not automatically resolve them. // The real host and token are inserted at request time. clientOpts := ghAPI.ClientOptions{ - Host: "none", - AuthToken: "none", - LogIgnoreEnv: true, + Host: "none", + AuthToken: "none", + LogIgnoreEnv: true, + SkipDefaultHeaders: opts.SkipDefaultHeaders, } debugEnabled, debugValue := utils.IsDebugEnabled() diff --git a/api/http_client_test.go b/api/http_client_test.go index ce20a2684..9a915837f 100644 --- a/api/http_client_test.go +++ b/api/http_client_test.go @@ -18,15 +18,16 @@ import ( func TestNewHTTPClient(t *testing.T) { type args struct { - config tokenGetter - appVersion string - logVerboseHTTP bool + config tokenGetter + appVersion string + logVerboseHTTP bool + skipDefaultHeaders bool } tests := []struct { name string args args host string - wantHeader map[string]string + wantHeader map[string][]string wantStderr string }{ { @@ -37,10 +38,10 @@ func TestNewHTTPClient(t *testing.T) { logVerboseHTTP: false, }, host: "github.com", - wantHeader: map[string]string{ - "authorization": "token MYTOKEN", - "user-agent": "GitHub CLI v1.2.3", - "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", + wantHeader: map[string][]string{ + "authorization": {"token MYTOKEN"}, + "user-agent": {"GitHub CLI v1.2.3"}, + "accept": {"application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview"}, }, wantStderr: "", }, @@ -51,10 +52,10 @@ func TestNewHTTPClient(t *testing.T) { appVersion: "v1.2.3", }, host: "example.com", - wantHeader: map[string]string{ - "authorization": "token GHETOKEN", - "user-agent": "GitHub CLI v1.2.3", - "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", + wantHeader: map[string][]string{ + "authorization": {"token GHETOKEN"}, + "user-agent": {"GitHub CLI v1.2.3"}, + "accept": {"application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview"}, }, wantStderr: "", }, @@ -66,10 +67,10 @@ func TestNewHTTPClient(t *testing.T) { logVerboseHTTP: false, }, host: "github.com", - wantHeader: map[string]string{ - "authorization": "", - "user-agent": "GitHub CLI v1.2.3", - "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", + wantHeader: map[string][]string{ + "authorization": nil, // should not be set + "user-agent": {"GitHub CLI v1.2.3"}, + "accept": {"application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview"}, }, wantStderr: "", }, @@ -81,10 +82,10 @@ func TestNewHTTPClient(t *testing.T) { logVerboseHTTP: false, }, host: "example.com", - wantHeader: map[string]string{ - "authorization": "", - "user-agent": "GitHub CLI v1.2.3", - "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", + wantHeader: map[string][]string{ + "authorization": nil, // should not be set + "user-agent": {"GitHub CLI v1.2.3"}, + "accept": {"application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview"}, }, wantStderr: "", }, @@ -96,10 +97,10 @@ func TestNewHTTPClient(t *testing.T) { logVerboseHTTP: true, }, host: "github.com", - wantHeader: map[string]string{ - "authorization": "token MYTOKEN", - "user-agent": "GitHub CLI v1.2.3", - "accept": "application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview", + wantHeader: map[string][]string{ + "authorization": {"token MYTOKEN"}, + "user-agent": {"GitHub CLI v1.2.3"}, + "accept": {"application/vnd.github.merge-info-preview+json, application/vnd.github.nebula-preview"}, }, wantStderr: heredoc.Doc(` * Request at