Update licenses for go-version-1.8.0 bump

This commit is contained in:
William Martin 2025-12-02 15:26:46 +01:00
parent 23b42daf71
commit b1bbe49b2e
15 changed files with 173 additions and 79 deletions

View file

@ -118,7 +118,7 @@ Some packages may only be included on certain architectures or operating systems
- [github.com/gorilla/css/scanner](https://pkg.go.dev/github.com/gorilla/css/scanner) ([BSD-3-Clause](https://github.com/gorilla/css/blob/v1.0.1/LICENSE))
- [github.com/gorilla/websocket](https://pkg.go.dev/github.com/gorilla/websocket) ([BSD-2-Clause](https://github.com/gorilla/websocket/blob/v1.5.3/LICENSE))
- [github.com/grpc-ecosystem/grpc-gateway/v2](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/v2) ([BSD-3-Clause](https://github.com/grpc-ecosystem/grpc-gateway/blob/v2.27.2/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.7.0/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.8.0/LICENSE))
- [github.com/hashicorp/golang-lru/v2](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2) ([MPL-2.0](https://github.com/hashicorp/golang-lru/blob/v2.0.7/LICENSE))
- [github.com/hashicorp/golang-lru/v2/simplelru](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2/simplelru) ([BSD-3-Clause](https://github.com/hashicorp/golang-lru/blob/v2.0.7/simplelru/LICENSE_list))
- [github.com/henvic/httpretty](https://pkg.go.dev/github.com/henvic/httpretty) ([MIT](https://github.com/henvic/httpretty/blob/v0.1.4/LICENSE.md))

View file

@ -118,7 +118,7 @@ Some packages may only be included on certain architectures or operating systems
- [github.com/gorilla/css/scanner](https://pkg.go.dev/github.com/gorilla/css/scanner) ([BSD-3-Clause](https://github.com/gorilla/css/blob/v1.0.1/LICENSE))
- [github.com/gorilla/websocket](https://pkg.go.dev/github.com/gorilla/websocket) ([BSD-2-Clause](https://github.com/gorilla/websocket/blob/v1.5.3/LICENSE))
- [github.com/grpc-ecosystem/grpc-gateway/v2](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/v2) ([BSD-3-Clause](https://github.com/grpc-ecosystem/grpc-gateway/blob/v2.27.2/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.7.0/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.8.0/LICENSE))
- [github.com/hashicorp/golang-lru/v2](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2) ([MPL-2.0](https://github.com/hashicorp/golang-lru/blob/v2.0.7/LICENSE))
- [github.com/hashicorp/golang-lru/v2/simplelru](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2/simplelru) ([BSD-3-Clause](https://github.com/hashicorp/golang-lru/blob/v2.0.7/simplelru/LICENSE_list))
- [github.com/henvic/httpretty](https://pkg.go.dev/github.com/henvic/httpretty) ([MIT](https://github.com/henvic/httpretty/blob/v0.1.4/LICENSE.md))

View file

@ -119,7 +119,7 @@ Some packages may only be included on certain architectures or operating systems
- [github.com/gorilla/css/scanner](https://pkg.go.dev/github.com/gorilla/css/scanner) ([BSD-3-Clause](https://github.com/gorilla/css/blob/v1.0.1/LICENSE))
- [github.com/gorilla/websocket](https://pkg.go.dev/github.com/gorilla/websocket) ([BSD-2-Clause](https://github.com/gorilla/websocket/blob/v1.5.3/LICENSE))
- [github.com/grpc-ecosystem/grpc-gateway/v2](https://pkg.go.dev/github.com/grpc-ecosystem/grpc-gateway/v2) ([BSD-3-Clause](https://github.com/grpc-ecosystem/grpc-gateway/blob/v2.27.2/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.7.0/LICENSE))
- [github.com/hashicorp/go-version](https://pkg.go.dev/github.com/hashicorp/go-version) ([MPL-2.0](https://github.com/hashicorp/go-version/blob/v1.8.0/LICENSE))
- [github.com/hashicorp/golang-lru/v2](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2) ([MPL-2.0](https://github.com/hashicorp/golang-lru/blob/v2.0.7/LICENSE))
- [github.com/hashicorp/golang-lru/v2/simplelru](https://pkg.go.dev/github.com/hashicorp/golang-lru/v2/simplelru) ([BSD-3-Clause](https://github.com/hashicorp/golang-lru/blob/v2.0.7/simplelru/LICENSE_list))
- [github.com/henvic/httpretty](https://pkg.go.dev/github.com/henvic/httpretty) ([MIT](https://github.com/henvic/httpretty/blob/v0.1.4/LICENSE.md))

View file

@ -0,0 +1,13 @@
# Each line is a file pattern followed by one or more owners.
# More on CODEOWNERS files: https://help.github.com/en/github/creating-cloning-and-archiving-repositories/about-code-owners
# Default owner
* @hashicorp/team-ip-compliance
# Add override rules below. Each line is a file/folder pattern followed by one or more owners.
# Being an owner means those groups or individuals will be added as reviewers to PRs affecting
# those areas of the code.
# Examples:
# /docs/ @docs-team
# *.js @js-team
# *.go @go-team

View file

@ -12,9 +12,6 @@ updates:
interval: monthly
labels:
- dependencies
# only update HashiCorp actions, external actions managed by TSCCR
allow:
- dependency-name: hashicorp/*
groups:
github-actions-breaking:
update-types:

View file

@ -0,0 +1,12 @@
<!-- heimdall_github_prtemplate:grc-pci_dss-2024-01-05 -->
## Description
<!-- Provide a summary of what the PR does and why it is being submitted. -->
## Related Issue
<!-- If this PR is linked to any issue, provide the issue number or description here. Any related JIRA tickets can also be added here. -->
## How Has This Been Tested?
<!-- Describe how the changes have been tested. Provide test instructions or details. -->

View file

@ -15,12 +15,12 @@ jobs:
steps:
- name: Setup go
uses: actions/setup-go@6edd4406fa81c3da01a34fa6f6343087c207a568 # v3.5.0
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version: ${{ matrix.go-version }}
- name: Checkout code
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Create test directory
run: |
@ -30,7 +30,7 @@ jobs:
run: go mod download
- name: Cache / restore go modules
uses: actions/cache@69d9d449aced6a2ede0bc19182fadc3a0a42d2b0 # v3.2.6
uses: actions/cache@0400d5f644dc74513175e3cd8d07132dd4860809 # v4.2.4
with:
path: |
~/go/pkg/mod
@ -48,6 +48,9 @@ jobs:
echo "$files"
exit 1
fi
- name: Run golangci-lint
uses: golangci/golangci-lint-action@4afd733a84b1f43292c63897423277bb7f4313a9
# Install gotestsum with go get for 1.15.3; otherwise default to go install
- name: Install gotestsum
@ -64,11 +67,20 @@ jobs:
- name: Run go tests
run: |
PACKAGE_NAMES=$(go list ./...)
gotestsum --format=short-verbose --junitfile $TEST_RESULTS/gotestsum-report.xml -- $PACKAGE_NAMES
gotestsum --format=short-verbose --junitfile $TEST_RESULTS/gotestsum-report.xml -- -p 2 -cover -coverprofile=coverage.out $PACKAGE_NAMES
# Save coverage report parts
- name: Upload and save artifacts
uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
name: Test Results
path: ${{ env.TEST_RESULTS }}
name: Test Results-${{matrix.go-version}}
path: ${{ env.TEST_RESULTS }}
- name: Upload coverage report
uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4
with:
path: coverage.out
name: Coverage-report-${{matrix.go-version}}
- name: Display coverage report
run: go tool cover -func=coverage.out

View file

@ -1,4 +1,4 @@
Copyright (c) 2014 HashiCorp, Inc.
Copyright IBM Corp. 2014, 2025
Mozilla Public License, version 2.0

View file

@ -1,6 +1,7 @@
# Versioning Library for Go
![Build Status](https://github.com/hashicorp/go-version/actions/workflows/go-tests.yml/badge.svg)
[![GoDoc](https://godoc.org/github.com/hashicorp/go-version?status.svg)](https://godoc.org/github.com/hashicorp/go-version)
[![Go Reference](https://pkg.go.dev/badge/github.com/hashicorp/go-version.svg)](https://pkg.go.dev/github.com/hashicorp/go-version)
go-version is a library for parsing versions and version constraints,
and verifying versions against a set of constraints. go-version
@ -12,7 +13,7 @@ Versions used with go-version must follow [SemVer](http://semver.org/).
## Installation and Usage
Package documentation can be found on
[GoDoc](http://godoc.org/github.com/hashicorp/go-version).
[Go Reference](https://pkg.go.dev/github.com/hashicorp/go-version).
Installation can be done with a normal `go get`:

View file

@ -1,4 +1,4 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version
@ -8,8 +8,26 @@ import (
"regexp"
"sort"
"strings"
"sync"
)
var (
constraintRegexp *regexp.Regexp
constraintRegexpOnce sync.Once
)
func getConstraintRegexp() *regexp.Regexp {
constraintRegexpOnce.Do(func() {
// This heavy lifting only happens the first time this function is called
constraintRegexp = regexp.MustCompile(fmt.Sprintf(
`^\s*(%s)\s*(%s)\s*$`,
`<=|>=|!=|~>|<|>|=|`,
VersionRegexpRaw,
))
})
return constraintRegexp
}
// Constraint represents a single constraint for a version, such as
// ">= 1.0".
type Constraint struct {
@ -29,38 +47,11 @@ type Constraints []*Constraint
type constraintFunc func(v, c *Version) bool
var constraintOperators map[string]constraintOperation
type constraintOperation struct {
op operator
f constraintFunc
}
var constraintRegexp *regexp.Regexp
func init() {
constraintOperators = map[string]constraintOperation{
"": {op: equal, f: constraintEqual},
"=": {op: equal, f: constraintEqual},
"!=": {op: notEqual, f: constraintNotEqual},
">": {op: greaterThan, f: constraintGreaterThan},
"<": {op: lessThan, f: constraintLessThan},
">=": {op: greaterThanEqual, f: constraintGreaterThanEqual},
"<=": {op: lessThanEqual, f: constraintLessThanEqual},
"~>": {op: pessimistic, f: constraintPessimistic},
}
ops := make([]string, 0, len(constraintOperators))
for k := range constraintOperators {
ops = append(ops, regexp.QuoteMeta(k))
}
constraintRegexp = regexp.MustCompile(fmt.Sprintf(
`^\s*(%s)\s*(%s)\s*$`,
strings.Join(ops, "|"),
VersionRegexpRaw))
}
// NewConstraint will parse one or more constraints from the given
// constraint string. The string must be a comma-separated list of
// constraints.
@ -107,7 +98,7 @@ func (cs Constraints) Check(v *Version) bool {
// to '>0.2' it is *NOT* treated as equal.
//
// Missing operator is treated as equal to '=', whitespaces
// are ignored and constraints are sorted before comaparison.
// are ignored and constraints are sorted before comparison.
func (cs Constraints) Equals(c Constraints) bool {
if len(cs) != len(c) {
return false
@ -176,9 +167,9 @@ func (c *Constraint) String() string {
}
func parseSingle(v string) (*Constraint, error) {
matches := constraintRegexp.FindStringSubmatch(v)
matches := getConstraintRegexp().FindStringSubmatch(v)
if matches == nil {
return nil, fmt.Errorf("Malformed constraint: %s", v)
return nil, fmt.Errorf("malformed constraint: %s", v)
}
check, err := NewVersion(matches[2])
@ -186,7 +177,25 @@ func parseSingle(v string) (*Constraint, error) {
return nil, err
}
cop := constraintOperators[matches[1]]
var cop constraintOperation
switch matches[1] {
case "=":
cop = constraintOperation{op: equal, f: constraintEqual}
case "!=":
cop = constraintOperation{op: notEqual, f: constraintNotEqual}
case ">":
cop = constraintOperation{op: greaterThan, f: constraintGreaterThan}
case "<":
cop = constraintOperation{op: lessThan, f: constraintLessThan}
case ">=":
cop = constraintOperation{op: greaterThanEqual, f: constraintGreaterThanEqual}
case "<=":
cop = constraintOperation{op: lessThanEqual, f: constraintLessThanEqual}
case "~>":
cop = constraintOperation{op: pessimistic, f: constraintPessimistic}
default:
cop = constraintOperation{op: equal, f: constraintEqual}
}
return &Constraint{
f: cop.f,

View file

@ -1,4 +1,4 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version

View file

@ -1,23 +1,39 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version
import (
"bytes"
"database/sql/driver"
"fmt"
"regexp"
"strconv"
"strings"
"sync"
)
// The compiled regular expression used to test the validity of a version.
var (
versionRegexp *regexp.Regexp
semverRegexp *regexp.Regexp
versionRegexp *regexp.Regexp
versionRegexpOnce sync.Once
semverRegexp *regexp.Regexp
semverRegexpOnce sync.Once
)
func getVersionRegexp() *regexp.Regexp {
versionRegexpOnce.Do(func() {
versionRegexp = regexp.MustCompile("^" + VersionRegexpRaw + "$")
})
return versionRegexp
}
func getSemverRegexp() *regexp.Regexp {
semverRegexpOnce.Do(func() {
semverRegexp = regexp.MustCompile("^" + SemverRegexpRaw + "$")
})
return semverRegexp
}
// The raw regular expression string used for testing the validity
// of a version.
const (
@ -42,28 +58,23 @@ type Version struct {
original string
}
func init() {
versionRegexp = regexp.MustCompile("^" + VersionRegexpRaw + "$")
semverRegexp = regexp.MustCompile("^" + SemverRegexpRaw + "$")
}
// NewVersion parses the given version and returns a new
// Version.
func NewVersion(v string) (*Version, error) {
return newVersion(v, versionRegexp)
return newVersion(v, getVersionRegexp())
}
// NewSemver parses the given version and returns a new
// Version that adheres strictly to SemVer specs
// https://semver.org/
func NewSemver(v string) (*Version, error) {
return newVersion(v, semverRegexp)
return newVersion(v, getSemverRegexp())
}
func newVersion(v string, pattern *regexp.Regexp) (*Version, error) {
matches := pattern.FindStringSubmatch(v)
if matches == nil {
return nil, fmt.Errorf("Malformed version: %s", v)
return nil, fmt.Errorf("malformed version: %s", v)
}
segmentsStr := strings.Split(matches[1], ".")
segments := make([]int64, len(segmentsStr))
@ -71,7 +82,7 @@ func newVersion(v string, pattern *regexp.Regexp) (*Version, error) {
val, err := strconv.ParseInt(str, 10, 64)
if err != nil {
return nil, fmt.Errorf(
"Error parsing version: %s", err)
"error parsing version: %s", err)
}
segments[i] = val
@ -174,7 +185,7 @@ func (v *Version) Compare(other *Version) int {
} else if lhs < rhs {
return -1
}
// Otherwis, rhs was > lhs, they're not equal
// Otherwise, rhs was > lhs, they're not equal
return 1
}
@ -382,22 +393,29 @@ func (v *Version) Segments64() []int64 {
// missing parts (1.0 => 1.0.0) will be made into a canonicalized form
// as shown in the parenthesized examples.
func (v *Version) String() string {
var buf bytes.Buffer
fmtParts := make([]string, len(v.segments))
return string(v.bytes())
}
func (v *Version) bytes() []byte {
var buf []byte
for i, s := range v.segments {
// We can ignore err here since we've pre-parsed the values in segments
str := strconv.FormatInt(s, 10)
fmtParts[i] = str
}
fmt.Fprintf(&buf, strings.Join(fmtParts, "."))
if v.pre != "" {
fmt.Fprintf(&buf, "-%s", v.pre)
}
if v.metadata != "" {
fmt.Fprintf(&buf, "+%s", v.metadata)
if i > 0 {
buf = append(buf, '.')
}
buf = strconv.AppendInt(buf, s, 10)
}
return buf.String()
if v.pre != "" {
buf = append(buf, '-')
buf = append(buf, v.pre...)
}
if v.metadata != "" {
buf = append(buf, '+')
buf = append(buf, v.metadata...)
}
return buf
}
// Original returns the original parsed version as-is, including any

View file

@ -1,4 +1,4 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version

View file

@ -1,4 +1,4 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version

View file

@ -1,4 +1,4 @@
// Copyright (c) HashiCorp, Inc.
// Copyright IBM Corp. 2014, 2025
// SPDX-License-Identifier: MPL-2.0
package version
@ -728,3 +728,35 @@ func TestLessThanOrEqual(t *testing.T) {
}
}
}
func BenchmarkVersionString(b *testing.B) {
v, _ := NewVersion("3.4.5-rc1+meta")
_ = v.String()
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
_ = v.String()
}
}
func BenchmarkCompareVersionV1(b *testing.B) {
v, _ := NewVersion("3.4.5")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
v.Compare(v)
}
}
func BenchmarkVersionCompareV2(b *testing.B) {
v, _ := NewVersion("1.2.3")
o, _ := NewVersion("v1.2.3.4")
b.ResetTimer()
b.ReportAllocs()
for i := 0; i < b.N; i++ {
v.Compare(o)
}
}