mirror of
https://github.com/davidallendj/magellan.git
synced 2025-12-20 03:27:03 -07:00
refactor: Update Go version
This commit updates the Go version to the latest stable release and adds QEMU setup to the GitHub workflow. It also sets up the necessary environment variables required by GoReleaser. These changes ensure that the project is using the latest Go version and is ready for release. Adds support for more architectures, package types, and better docker image.
This commit is contained in:
parent
7941d6caad
commit
041d134079
7 changed files with 168 additions and 176 deletions
29
.github/workflows/main.yml
vendored
29
.github/workflows/main.yml
vendored
|
|
@ -14,21 +14,36 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Set up Go 1.21
|
||||
- name: Set up latest stable Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.21
|
||||
go-version: stable
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: 1
|
||||
fetch-depth: 1
|
||||
|
||||
# Set environment variables required by GoReleaser
|
||||
- name: Set build environment variables
|
||||
run: |
|
||||
echo "GIT_STATE=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)" >> $GITHUB_ENV
|
||||
echo "BUILD_HOST=$(hostname)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=$(go version | awk '{print $3}')" >> $GITHUB_ENV
|
||||
echo "BUILD_USER=$(whoami)" >> $GITHUB_ENV
|
||||
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
||||
|
||||
- name: Docker Login
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.actor }}
|
||||
password: ${{ secrets.GITHUB_TOKEN }}
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: 1
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Release with goreleaser
|
||||
uses: goreleaser/goreleaser-action@v6
|
||||
env:
|
||||
|
|
|
|||
44
.github/workflows/prbuild.yml
vendored
Normal file
44
.github/workflows/prbuild.yml
vendored
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
name: Build PR with goreleaser
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
branches:
|
||||
- main
|
||||
types: [opened, synchronize, reopened, edited]
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
prbuild:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
|
||||
- name: Set up latest stable Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: stable
|
||||
|
||||
- name: Set up QEMU
|
||||
uses: docker/setup-qemu-action@v3
|
||||
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-tags: 1
|
||||
fetch-depth: 1
|
||||
|
||||
# Set environment variables required by GoReleaser
|
||||
- name: Set build environment variables
|
||||
run: |
|
||||
echo "GIT_STATE=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)" >> $GITHUB_ENV
|
||||
echo "BUILD_HOST=$(hostname)" >> $GITHUB_ENV
|
||||
echo "GO_VERSION=$(go version | awk '{print $3}')" >> $GITHUB_ENV
|
||||
echo "BUILD_USER=$(whoami)" >> $GITHUB_ENV
|
||||
echo "CGO_ENABLED=1" >> $GITHUB_ENV
|
||||
|
||||
- name: Build with goreleaser
|
||||
uses: goreleaser/goreleaser-action@v6
|
||||
|
||||
with:
|
||||
version: '~> v2'
|
||||
args: release --snapshot
|
||||
id: goreleaser
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
|
|
@ -6,3 +6,4 @@ emulator/rf-emulator
|
|||
**.part
|
||||
dist/*
|
||||
**coverage.out**
|
||||
magellan.1
|
||||
109
.goreleaser.yaml
109
.goreleaser.yaml
|
|
@ -7,12 +7,33 @@ before:
|
|||
- go-md2man -in README.md -out magellan.1
|
||||
|
||||
builds:
|
||||
- env:
|
||||
- CGO_ENABLED=1
|
||||
- binary: magellan
|
||||
# export GIT_STATE=$(if git diff-index --quiet HEAD --; then echo 'clean'; else echo 'dirty'; fi)
|
||||
# export BUILD_HOST=$(hostname)
|
||||
# export GO_VERSION=$(go version | awk '{print $3}')
|
||||
# export BUILD_USER=$(whoami)
|
||||
ldflags:
|
||||
- "-X main.GitCommit={{.Commit}} \
|
||||
-X main.BuildTime={{.Timestamp}} \
|
||||
-X main.Version={{.Version}} \
|
||||
-X main.GitBranch={{.Branch}} \
|
||||
-X main.GitTag={{.Tag}} \
|
||||
-X main.GitState={{ .Env.GIT_STATE }} \
|
||||
-X main.BuildHost={{ .Env.BUILD_HOST }} \
|
||||
-X main.GoVersion={{ .Env.GO_VERSION }} \
|
||||
-X main.BuildUser={{ .Env.BUILD_USER }} "
|
||||
goos:
|
||||
- linux
|
||||
- darwin
|
||||
- windows
|
||||
goarch:
|
||||
- amd64
|
||||
- arm64
|
||||
goamd64:
|
||||
- v3
|
||||
env:
|
||||
- CGO_ENABLED=0
|
||||
|
||||
archives:
|
||||
- format: tar.gz
|
||||
# this name template makes the OS and Arch compatible with the results of uname.
|
||||
|
|
@ -27,17 +48,55 @@ archives:
|
|||
- LICENSE
|
||||
- CHANGELOG.md
|
||||
- README.md
|
||||
- bin/magellan.sh
|
||||
- magellan.1
|
||||
|
||||
nfpms:
|
||||
- id: magellan
|
||||
formats:
|
||||
- deb
|
||||
- rpm
|
||||
- apk
|
||||
- archlinux
|
||||
maintainer: "David J. Allen <allend@lanl.gov>"
|
||||
description: "Magellan is a discovery tool for BMCs."
|
||||
homepage: "https://www.openchami.org"
|
||||
license: MIT
|
||||
section: utils
|
||||
priority: optional
|
||||
contents:
|
||||
- src: dist/magellan_{{ .Os }}_{{ if eq .Arch "amd64" }}{{ .Arch }}_{{ .Amd64 }}{{ else }}{{ .Arch }}{{ end }}/magellan
|
||||
dst: /usr/local/bin/magellan
|
||||
- src: magellan.1
|
||||
dst: /usr/share/man/man1/
|
||||
|
||||
|
||||
dockers:
|
||||
-
|
||||
image_templates:
|
||||
- ghcr.io/openchami/{{.ProjectName}}:latest
|
||||
- ghcr.io/openchami/{{.ProjectName}}:{{ .Tag }}
|
||||
- ghcr.io/openchami/{{.ProjectName}}:v{{ .Major }}
|
||||
- ghcr.io/openchami/{{.ProjectName}}:v{{ .Major }}.{{ .Minor }}
|
||||
- image_templates:
|
||||
- &amd64_linux_image ghcr.io/openchami/{{.ProjectName}}:{{ .Tag }}-amd64
|
||||
- ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}-amd64
|
||||
- ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}.{{ .Minor }}-amd64
|
||||
use: buildx
|
||||
build_flag_templates:
|
||||
- "--pull"
|
||||
- "--platform=linux/amd64"
|
||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||
- "--label=org.opencontainers.image.title={{.ProjectName}}"
|
||||
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
|
||||
- "--label=org.opencontainers.image.version={{.Version}}"
|
||||
goarch: amd64
|
||||
goamd64: v3
|
||||
extra_files:
|
||||
- LICENSE
|
||||
- CHANGELOG.md
|
||||
- README.md
|
||||
- image_templates:
|
||||
- &arm64v8_linux_image ghcr.io/openchami/{{.ProjectName}}:{{ .Tag }}-arm64
|
||||
- ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}-arm64
|
||||
- ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}.{{ .Minor }}-arm64
|
||||
use: buildx
|
||||
build_flag_templates:
|
||||
- "--pull"
|
||||
- "--platform=linux/arm64"
|
||||
- "--label=org.opencontainers.image.created={{.Date}}"
|
||||
- "--label=org.opencontainers.image.title={{.ProjectName}}"
|
||||
- "--label=org.opencontainers.image.revision={{.FullCommit}}"
|
||||
|
|
@ -46,7 +105,32 @@ dockers:
|
|||
- LICENSE
|
||||
- CHANGELOG.md
|
||||
- README.md
|
||||
- bin/magellan.sh
|
||||
goarch: arm64
|
||||
|
||||
docker_manifests:
|
||||
- name_template: "ghcr.io/openchami/{{.ProjectName}}:latest"
|
||||
image_templates:
|
||||
- *amd64_linux_image
|
||||
- *arm64v8_linux_image
|
||||
|
||||
- name_template: "ghcr.io/openchami/{{.ProjectName}}:{{ .Tag }}"
|
||||
image_templates:
|
||||
- *amd64_linux_image
|
||||
- *arm64v8_linux_image
|
||||
|
||||
- name_template: "ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}"
|
||||
image_templates:
|
||||
- *amd64_linux_image
|
||||
- *arm64v8_linux_image
|
||||
|
||||
- name_template: "ghcr.io/openchami/{{.ProjectName}}:{{ .Major }}.{{ .Minor }}"
|
||||
image_templates:
|
||||
- *amd64_linux_image
|
||||
- *arm64v8_linux_image
|
||||
|
||||
|
||||
|
||||
|
||||
checksum:
|
||||
name_template: 'checksums.txt'
|
||||
snapshot:
|
||||
|
|
@ -57,8 +141,3 @@ changelog:
|
|||
exclude:
|
||||
- '^docs:'
|
||||
- '^test:'
|
||||
release:
|
||||
github:
|
||||
name_template: "{{.Version}}"
|
||||
prerelease: auto
|
||||
mode: append
|
||||
|
|
|
|||
10
Dockerfile
10
Dockerfile
|
|
@ -1,13 +1,17 @@
|
|||
FROM cgr.dev/chainguard/wolfi-base
|
||||
FROM chainguard/wolfi-base:latest
|
||||
|
||||
RUN apk add --no-cache tini bash
|
||||
# Include curl in the final image for manual checks of the Redfish urls
|
||||
RUN set -ex \
|
||||
&& apk update \
|
||||
&& apk add --no-cache curl tini \
|
||||
&& rm -rf /var/cache/apk/* \
|
||||
&& rm -rf /tmp/*
|
||||
|
||||
# nobody 65534:65534
|
||||
USER 65534:65534
|
||||
|
||||
|
||||
COPY magellan /magellan
|
||||
COPY /bin/magellan.sh /magellan.sh
|
||||
|
||||
|
||||
CMD [ "/magellan" ]
|
||||
|
|
|
|||
122
bin/magellan.sh
122
bin/magellan.sh
|
|
@ -1,122 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
EXE=./magellan
|
||||
SUBNETS=""
|
||||
PORTS=""
|
||||
USER=""
|
||||
PASS=""
|
||||
SMD_HOST=""
|
||||
SMD_PORT=""
|
||||
THREADS="1"
|
||||
TIMEOUT="30"
|
||||
ARGS=""
|
||||
FORCE_UPDATE=false
|
||||
SCAN_PARAMS=""
|
||||
COLLECT_PARAMS=""
|
||||
|
||||
|
||||
function scan() {
|
||||
# ./magellan scan --subnet 172.16.0.0 --port 443
|
||||
${EXE} scan ${SCAN_PARAMS}
|
||||
# --subnet ${SUBNETS} \
|
||||
# --port ${PORTS} \
|
||||
# --timeout ${TIMEOUT} \
|
||||
# --threads ${THREADS}
|
||||
}
|
||||
|
||||
function list(){
|
||||
# ./magellan list
|
||||
${EXE} list
|
||||
}
|
||||
|
||||
function collect() {
|
||||
# ./magellan collect --user admin --pass password
|
||||
${EXE} collect ${COLLECT_PARAMS}
|
||||
# --user ${USER} \
|
||||
# --pass ${PASS} \
|
||||
# --timeout ${TIMEOUT} \
|
||||
# --threads ${THREADS} \
|
||||
# --host ${SMD_HOST} \
|
||||
# --port ${SMD_PORT} \
|
||||
# --force-update ${FORCE_UPDATE}
|
||||
}
|
||||
|
||||
|
||||
# parse incoming arguments to set variables
|
||||
while [[ $# -gt 0 ]]; do
|
||||
case $1 in
|
||||
--scan)
|
||||
SCAN_PARAMS="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--collect)
|
||||
COLLECT_PARAMS="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--subnet)
|
||||
SUBNETS="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
-p|--port)
|
||||
PORTS="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--user)
|
||||
USER="$2"
|
||||
shift # past argument
|
||||
shift # past value
|
||||
;;
|
||||
--pass|--password)
|
||||
PASS="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--smd-host)
|
||||
SMD_HOST="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--smd-port)
|
||||
SMD_PORT="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--timeout)
|
||||
TIMEOUT="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
--threads)
|
||||
THREADS="$2"
|
||||
shift
|
||||
shift
|
||||
;;
|
||||
-*|--*)
|
||||
echo "Unknown option $1"
|
||||
exit 1
|
||||
;;
|
||||
*)
|
||||
ARGS+=("$1") # save positional arg
|
||||
shift # past argument
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
|
||||
|
||||
if [[ -n $1 ]]; then
|
||||
echo "Last line of file specified as non-opt/last argument:"
|
||||
tail -1 "$1"
|
||||
fi
|
||||
|
||||
scan
|
||||
collect
|
||||
|
||||
# run with docker
|
||||
# docker run magellan:latest magellan.sh \
|
||||
# --scan "--subnet 127.16.0.0 --port 443" \
|
||||
# --collect "--user admin --pass password --timeout 300 --threads 1 --smd-host host --smd-port port"
|
||||
29
dist/archlinux/PKGBUILD
vendored
29
dist/archlinux/PKGBUILD
vendored
|
|
@ -1,29 +0,0 @@
|
|||
# Maintainer: David J. Allen <allend@lanl.gov>
|
||||
pkgname=magellan
|
||||
pkgver=v0.1.5
|
||||
pkgrel=1
|
||||
pkgdesc="Redfish-based BMC discovery tool written in Go"
|
||||
arch=("x86_64")
|
||||
url="https://github.com/OpenCHAMI/magellan"
|
||||
license=('MIT')
|
||||
groups=("openchami")
|
||||
provides=('magellan')
|
||||
conflicts=('magellan')
|
||||
source_x86_64=("${url}/releases/download/${pkgver}/${pkgname}_Linux_x86_64.tar.gz")
|
||||
sha256sums_x86_64=('1bb028d592d5389b519362e6aa7021f27443f0b36471e09ee7f47ab5cb6d4d7f')
|
||||
|
||||
# Please refer to the 'USING VCS SOURCES' section of the PKGBUILD man page for
|
||||
# a description of each element in the source array.
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir" || exit
|
||||
printf "%s" "$(git describe --tags --abbrev=0)"
|
||||
}
|
||||
|
||||
package() {
|
||||
cd "$srcdir/" || exit
|
||||
|
||||
# install the binary to /usr/bin
|
||||
mkdir -p "${pkgdir}/usr/bin"
|
||||
install -m755 magellan "${pkgdir}/usr/bin/magellan"
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue