Code Monkey home page Code Monkey logo

go-dependency-submission's Introduction

Go Dependency Submission

This GitHub Action calculates dependencies for a Go build-target (a Go file with a main function) and submits the list to the Dependency submission API. Dependencies then appear in your repository's dependency graph, and you'll receive Dependabot alerts and updates for vulnerable or out-of-date dependencies.

Running locally

Because we are checking in the Typescript output, you may see check failures if you don't generate the contents of dist/ in a similar manner to our CI check. You can easily rectify this by regenerating in a codespace and using what we use in our workflow YAML:

npm ci --ignore-scripts
npm rebuild && npm run all

Example

name: Go Dependency Submission
on:
  push:
    branches:
      - main

# The API requires write permission on the repository to submit dependencies
permissions:
  contents: write

# Environment variables to configure Go and Go modules. Customize as necessary
env:
  GOPROXY: '' # A Go Proxy server to be used
  GOPRIVATE: '' # A list of modules are considered private and not requested from GOPROXY

jobs:
  go-action-detection:
    runs-on: ubuntu-latest
    steps:
      - name: 'Checkout Repository'
        uses: actions/checkout@v3

      - uses: actions/setup-go@v3
        with:
          go-version: ">=1.18.0"

      - name: Run snapshot action
        uses: actions/go-dependency-submission@v2
        with:
            # Required: Define the repo path to the go.mod file used by the
            # build target
            go-mod-path: go-example/go.mod
            #
            # Optional: Define the path of a build target (a file with a
            # `main()` function) If not defined, this Action will collect all
            # dependencies used by all build targets for the module, which may
            # include Go dependencies used by tests and tooling.
            go-build-target: go-example/cmd/octocat.go

go-dependency-submission's People

Contributors

brphelps avatar cnagadya avatar courtneycl avatar dependabot[bot] avatar elireisman avatar febuiles avatar gwynne avatar hmaurer avatar jamesmgreene avatar jhutchings1 avatar juxtin avatar lseppala avatar pcarlisle avatar takost avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

go-dependency-submission's Issues

Cannot download `npm` dependencies.

Hi,

I'm opening this issue to double-check if this is expected, but it is not possible to clone this repository and execute npm install, either directly on the local machine, or on the devcontainer as it requires credentials to retrieve github/dependency-submission-toolkit

I've also opened an issue at dependency-submission-toolkit to clarify the issue. github/dependency-submission-toolkit#14

OpenBao - expected no more than one package in cache with namespace+name

In this GitHub action run, I seem to have tripped this error:

if (matches.length !== 1) {
throw new Error(
'assertion failed: expected no more than one package in cache with namespace+name. ' +
'Found: ' +
JSON.stringify(matches) +
'for ' +
JSON.stringify(matcher)
)
}

Based on history of the action, the first failure of this pipeline seems to have been caused by this commit:

openbao/openbao@d6a36ee#diff-33ef32bf6c23acb95f5902d7097b7a1d5128ca061167ec0716715b0b9eeaa5f6

But the change to go.mod seems unrelated (from this PoV) and the workflow's error message hasn't been preserved, so it might've been causing a different error message at the time.

The full error produced is as follows
2024-07-16T22:39:31.1809478Z Error: assertion failed: expected no more than one package in cache with namespace+name. Found: [{"packageURL":{"type":"golang","name":"go","namespace":"github.com/google/tink","version":"v1.7.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"aws-sdk-go","namespace":"github.com/aws","version":"v1.44.269","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-jmespath","namespace":"github.com/jmespath","version":"v0.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"errors","namespace":"github.com/pkg","version":"v0.9.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"net","namespace":"golang.org/x","version":"v0.26.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"oauth2","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"api","namespace":"google.golang.org","version":"v0.149.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-metrics","namespace":"github.com/armon","version":"v0.4.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"datadog-go","namespace":"github.com/DataDog","version":"v3.2.0+incompatible","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"circonus-gometrics","namespace":"github.com/circonus-labs","version":"v2.3.1+incompatible","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"circonusllhist","namespace":"github.com/circonus-labs","version":"v0.1.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"github.com/golang","version":"v1.5.4","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-immutable-radix","namespace":"github.com/hashicorp","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-uuid","namespace":"github.com/hashicorp","version":"v1.0.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"golang-lru","namespace":"github.com/hashicorp","version":"v0.5.4","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-retryablehttp","namespace":"github.com/hashicorp","version":"v0.7.7","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cleanhttp","namespace":"github.com/hashicorp","version":"v0.5.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-hclog","namespace":"github.com/hashicorp","version":"v1.6.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"client_golang","namespace":"github.com/prometheus","version":"v1.14.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"client_model","namespace":"github.com/prometheus","version":"v0.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"common","namespace":"github.com/prometheus","version":"v0.37.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"httpunix","namespace":"github.com/tv42","version":"v0.0.0-20191220191345-2ba4b9c3382c","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-radix","namespace":"github.com/armon","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/cenkalti/backoff","version":"v3.2.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"groupcache","namespace":"github.com/golang","version":"v0.0.0-20210331224755-41bb18bfe9da","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"github.com/golang","version":"v1.5.4","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"snappy","namespace":"github.com/golang","version":"v0.0.4","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v2","namespace":"github.com/googleapis/gax-go","version":"v2.12.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"api","namespace":"google.golang.org","version":"v0.149.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"api","namespace":"google.golang.org/genproto/googleapis","version":"v0.0.0-20240123012728-ef4313101c80","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"rpc","namespace":"google.golang.org/genproto/googleapis","version":"v0.0.0-20240304212257-790db918fca8","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"grpc","namespace":"google.golang.org","version":"v1.62.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"github.com/golang","version":"v1.5.4","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"net","namespace":"golang.org/x","version":"v0.26.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"text","namespace":"golang.org/x","version":"v0.16.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"genproto","namespace":"google.golang.org","version":"v0.0.0-20240123012728-ef4313101c80","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-cleanhttp","namespace":"github.com/hashicorp","version":"v0.5.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-hclog","namespace":"github.com/hashicorp","version":"v1.6.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-immutable-radix","namespace":"github.com/hashicorp","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-uuid","namespace":"github.com/hashicorp","version":"v1.0.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"golang-lru","namespace":"github.com/hashicorp","version":"v0.5.4","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-multierror","namespace":"github.com/hashicorp","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-plugin","namespace":"github.com/hashicorp","version":"v1.4.9","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"protobuf","namespace":"github.com/golang","version":"v1.5.4","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cmp","namespace":"github.com/google","version":"v0.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"protobuf","namespace":"google.golang.org","version":"v1.33.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-hclog","namespace":"github.com/hashicorp","version":"v1.6.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"yamux","namespace":"github.com/hashicorp","version":"v0.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-testing-interface","namespace":"github.com/mitchellh","version":"v1.14.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"run","namespace":"github.com/oklog","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"net","namespace":"golang.org/x","version":"v0.26.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"grpc","namespace":"google.golang.org","version":"v1.62.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"text","namespace":"golang.org/x","version":"v0.16.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"genproto","namespace":"google.golang.org","version":"v0.0.0-20240123012728-ef4313101c80","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-retryablehttp","namespace":"github.com/hashicorp","version":"v0.7.7","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-cleanhttp","namespace":"github.com/hashicorp","version":"v0.5.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-hclog","namespace":"github.com/hashicorp","version":"v1.6.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-rootcerts","namespace":"github.com/hashicorp","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-homedir","namespace":"github.com/mitchellh","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"mlock","namespace":"github.com/hashicorp/go-secure-stdlib","version":"v0.1.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"parseutil","namespace":"github.com/hashicorp/go-secure-stdlib","version":"v0.1.7","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"strutil","namespace":"github.com/hashicorp/go-secure-stdlib","version":"v0.1.2","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-glob","namespace":"github.com/ryanuber","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-sockaddr","namespace":"github.com/hashicorp","version":"v1.0.6","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cli","namespace":"github.com/mitchellh","version":"v1.1.5","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/sprig","version":"v3.2.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-radix","namespace":"github.com/armon","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"speakeasy","namespace":"github.com/bgentry","version":"v0.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-multierror","namespace":"github.com/hashicorp","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"complete","namespace":"github.com/posener","version":"v1.2.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-wordwrap","namespace":"github.com/mitchellh","version":"v1.0.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"columnize","namespace":"github.com/ryanuber","version":"v2.1.2+incompatible","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/sprig","version":"v3.2.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-radix","namespace":"github.com/armon","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"speakeasy","namespace":"github.com/bgentry","version":"v0.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-multierror","namespace":"github.com/hashicorp","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"complete","namespace":"github.com/posener","version":"v1.2.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"mapstructure","namespace":"github.com/mitchellh","version":"v1.5.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"strutil","namespace":"github.com/hashicorp/go-secure-stdlib","version":"v0.1.2","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-glob","namespace":"github.com/ryanuber","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-sockaddr","namespace":"github.com/hashicorp","version":"v1.0.6","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cli","namespace":"github.com/mitchellh","version":"v1.1.5","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/sprig","version":"v3.2.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-radix","namespace":"github.com/armon","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"speakeasy","namespace":"github.com/bgentry","version":"v0.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-multierror","namespace":"github.com/hashicorp","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"complete","namespace":"github.com/posener","version":"v1.2.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-wordwrap","namespace":"github.com/mitchellh","version":"v1.0.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"columnize","namespace":"github.com/ryanuber","version":"v2.1.2+incompatible","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/sprig","version":"v3.2.3","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"goutils","namespace":"github.com/Masterminds","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"v3","namespace":"github.com/Masterminds/semver","version":"v3.2.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-radix","namespace":"github.com/armon","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"speakeasy","namespace":"github.com/bgentry","version":"v0.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"color","namespace":"github.com/fatih","version":"v1.16.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"uuid","namespace":"github.com/google","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-multierror","namespace":"github.com/hashicorp","version":"v1.1.1","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"errwrap","namespace":"github.com/hashicorp","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"xstrings","namespace":"github.com/huandu","version":"v1.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mergo","namespace":"github.com/imdario","version":"v0.3.15","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"yaml.v3","namespace":"gopkg.in","version":"v3.0.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"complete","namespace":"github.com/posener","version":"v1.2.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"decimal","namespace":"github.com/shopspring","version":"v1.3.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"cast","namespace":"github.com/spf13","version":"v1.5.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"crypto","namespace":"golang.org/x","version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-uuid","namespace":"github.com/hashicorp","version":"v1.0.3","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-version","namespace":"github.com/hashicorp","version":"v1.6.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"golang-lru","namespace":"github.com/hashicorp","version":"v0.5.4","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"hcl","namespace":"github.com/hashicorp","version":"v1.0.1-vault-5","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"yamux","namespace":"github.com/hashicorp","version":"v0.1.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-jmespath","namespace":"github.com/jmespath","version":"v0.4.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-colorable","namespace":"github.com/mattn","version":"v0.1.13","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]},{"packageURL":{"type":"golang","name":"go-isatty","namespace":"github.com/mattn","version":"v0.0.20","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"copystructure","namespace":"github.com/mitchellh","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go-homedir","namespace":"github.com/mitchellh","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-testing-interface","namespace":"github.com/mitchellh","version":"v1.14.1","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"mapstructure","namespace":"github.com/mitchellh","version":"v1.5.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"reflectwalk","namespace":"github.com/mitchellh","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"run","namespace":"github.com/oklog","version":"v1.1.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"lz4","namespace":"github.com/pierrec","version":"v2.6.1+incompatible","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go-glob","namespace":"github.com/ryanuber","version":"v1.0.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"go.opencensus.io","namespace":null,"version":"v0.24.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"atomic","namespace":"go.uber.org","version":"v1.11.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"net","namespace":"golang.org/x","version":"v0.26.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"sys","namespace":"golang.org/x","version":"v0.21.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"text","namespace":"golang.org/x","version":"v0.16.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"time","namespace":"golang.org/x","version":"v0.5.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"genproto","namespace":"google.golang.org","version":"v0.0.0-20240123012728-ef4313101c80","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"grpc","namespace":"google.golang.org","version":"v1.62.1","qualifiers":null,"subpath":null},"dependencies":[]}]},{"packageURL":{"type":"golang","name":"go","namespace":"github.com/json-iterator","version":"v1.1.12","qualifiers":null,"subpath":null},"dependencies":[{"packageURL":{"type":"golang","name":"go-spew","namespace":"github.com/davecgh","version":"v1.1.2-0.20180830191138-d8f796af33cc","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"gofuzz","namespace":"github.com/google","version":"v1.2.0","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"concurrent","namespace":"github.com/modern-go","version":"v0.0.0-20180306012644-bacd9c7ef1dd","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"reflect2","namespace":"github.com/modern-go","version":"v1.0.2","qualifiers":null,"subpath":null},"dependencies":[]},{"packageURL":{"type":"golang","name":"testify","namespace":"github.com/stretchr","version":"v1.9.0","qualifiers":null,"subpath":null},"dependencies":[]}]}]for {"name":"go"}

I think in particular, this matcher might be at fault:

https://github.com/github/dependency-submission-toolkit/blob/5758564c1c8c0e00bb72f7e5061782271b6a49ab/src/package.ts#L100-L122

  /**
   * Provided a "matcher" object with any of the string fields 'namespace',
   * 'name', or 'version', returns true if the Package has values matching the
   * matcher.
   *
   * @param {Object} matcher
   * @returns {boolean}
   */
  matching(matcher: {
    namespace?: string
    name?: string
    version?: string
  }): boolean {
    // prettier-ignore
    return (
      (matcher.namespace === undefined ||
        this.packageURL.namespace === matcher.namespace) && // XXX: namespace is unset in the above and thus any namespace would match.
      (matcher.name === undefined || this.packageURL.name === matcher.name) &&
      (matcher.version === undefined ||
        this.packageURL.version === matcher.version)
    )
  }
}

The following dependencies above I believe might both match as a result of the vaue matcher criteria:

github.com/google/tink.go 1 {'.[0].packageURL'}
github.com/json-iterator.go 1 {'.[1].packageURL'}

(in {namespace}.{name} compressed format with resulting jq paths from the above output).

While both have the nominal name "go", neither get imported as "go" in the code base (a subset of tink is imported as github.com/google/tink/go/kwp/subtle, though github.com/google/tink/go is the go module, and the json-iterator dependency is not a direct dependency). I am not entirely sure but I think like /v{number} imports, this'll revert to the base name (tink or json-iterator), and not go were the base module to be imported. However, they do have different namespaces, but this is elided from the matcher.

Both dependencies are rather old to the project:

6943ca5bc1 (hc-github-team-secure-vault-core 2023-05-30 19:49:24 -0400  53)     github.com/google/tink/go v1.7.0
...
37c28b47cf (Nick Cabatoff                    2021-11-16 15:07:03 -0500 280)     github.com/json-iterator/go v1.1.12 // indirect

so I am rather confused why this has only more recently started failing (at most 5 months ago), given neither code section seems to have changed recently in either of our projects (OpenBao, go-dependency-submission or dependency-submission-toolkit).

Thanks!

vicluk

Thank you ๐Ÿ™‡โ€โ™€ for wanting to create an issue in this repository. Before you do, please ensure you are filing the issue in the right place. Issues should only be opened on if the issue relates to code in this repository.

If your issue is relevant to this repository, please delete this text and continue to create this issue. Thank you in advance.

The action assumes github.com

We use GitHub Enterprise Server and therefore GH uses a different hostname.

Seems the action does not use locations from the github.context but assumes github.com.

2023-05-03T12:40:34.4208205Z ##[error]HTTP Status 401 for request POST https://api.github.com/repos/platform/vs86957-go-test/dependency-graph/snapshots
2023-05-03T12:40:34.4209980Z ##[error]Response body:
{
  "message": "Bad credentials",
  "documentation_url": "https://docs.github.com/rest"
}
2023-05-03T12:40:34.4210878Z ##[error]Bad credentials
2023-05-03T12:40:34.4729810Z ##[error]HttpError: Bad credentials
    at /runner/_work/_actions/actions/go-dependency-submission/v1/webpack:/go-dependency-submission/node_modules/@github/dependency-submission-toolkit/dist/index.js:4235:1
    at processTicksAndRejections (node:internal/process/task_queues:96:5)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.