mirror of
https://github.com/open-policy-agent/opa.git
synced 2026-08-12 19:32:48 -06:00
db4d9872cc
This change adds linux/arm64 binaries to the release. It also publishes an arm64 container image for all variants (standard, debug, rootless, static) and releases (dev, edge, latest). The build and push process uses buildx in order to push the individual images by digest (i.e. untagged) and reference them in a single, tagged manifest list. This avoids cluttering Docker Hub's tag list with `<tag>-<arch>` tags. Fixes #2233 Signed-off-by: Nick Graef <1031317+ngraef@users.noreply.github.com>
85 lines
2.0 KiB
Go
85 lines
2.0 KiB
Go
// Copyright 2016 The OPA Authors. All rights reserved.
|
|
// Use of this source code is governed by an Apache2
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"crypto/rand"
|
|
"fmt"
|
|
"io"
|
|
"os"
|
|
|
|
"github.com/spf13/cobra"
|
|
|
|
"github.com/open-policy-agent/opa/internal/report"
|
|
"github.com/open-policy-agent/opa/internal/uuid"
|
|
"github.com/open-policy-agent/opa/version"
|
|
)
|
|
|
|
func init() {
|
|
|
|
var check bool
|
|
var versionCommand = &cobra.Command{
|
|
Use: "version",
|
|
Short: "Print the version of OPA",
|
|
Long: "Show version and build information for OPA.",
|
|
Run: func(cmd *cobra.Command, args []string) {
|
|
generateCmdOutput(os.Stdout, check)
|
|
},
|
|
}
|
|
|
|
// The version command can also be used to check for the latest released OPA version.
|
|
// Some tools could use this for feature flagging purposes and hence this option is OFF by-default.
|
|
versionCommand.Flags().BoolVarP(&check, "check", "c", false, "check for latest OPA release")
|
|
RootCommand.AddCommand(versionCommand)
|
|
}
|
|
|
|
func generateCmdOutput(out io.Writer, check bool) {
|
|
fmt.Fprintln(out, "Version: "+version.Version)
|
|
fmt.Fprintln(out, "Build Commit: "+version.Vcs)
|
|
fmt.Fprintln(out, "Build Timestamp: "+version.Timestamp)
|
|
fmt.Fprintln(out, "Build Hostname: "+version.Hostname)
|
|
fmt.Fprintln(out, "Go Version: "+version.GoVersion)
|
|
fmt.Fprintln(out, "Platform: "+version.Platform)
|
|
|
|
var wasmAvailable string
|
|
|
|
if version.WasmRuntimeAvailable() {
|
|
wasmAvailable = "available"
|
|
} else {
|
|
wasmAvailable = "unavailable"
|
|
}
|
|
|
|
fmt.Fprintln(out, "WebAssembly: "+wasmAvailable)
|
|
|
|
if check {
|
|
err := checkOPAUpdate(out)
|
|
if err != nil {
|
|
fmt.Fprintf(out, "Error: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
}
|
|
|
|
func checkOPAUpdate(out io.Writer) error {
|
|
id, err := uuid.New(rand.Reader)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
reporter, err := report.New(id, report.Options{})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
resp, err := reporter.SendReport(context.Background())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
fmt.Fprintln(out, resp.Pretty())
|
|
return nil
|
|
}
|