Skip to content

Commit b31c863

Browse files
committed
Add build script and github action build
1 parent b18af32 commit b31c863

6 files changed

Lines changed: 109 additions & 6 deletions

File tree

.github/workflows/release.yml

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
name: "Build and release"
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
8+
jobs:
9+
build-and-release:
10+
runs-on: "ubuntu-latest"
11+
12+
steps:
13+
- name: Check out repository code
14+
uses: actions/checkout@v2
15+
- uses: actions/setup-go@v3
16+
- name: "Build & release"
17+
run: |
18+
./release.sh
19+
- uses: "marvinpinto/action-automatic-releases@latest"
20+
with:
21+
repo_token: "${{ secrets.GITHUB_TOKEN }}"
22+
prerelease: false
23+
files: |
24+
dist/*

.gitignore

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
dist
12
.env
2-
*.yml
3-
*.json
3+
.vscode
4+
config.yml
5+
state.json
46
fixtures
57
phpipam2dns

TODO

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,5 @@ ensure (hostname, IP)
22

33
[ ] refacto ensureReverse and ensureStraight
44
[ ] error handling on NSUpdater.Ensure and NSUpdater.Delete
5+
6+
[ ] Take a look at go:generate and go:embed for build chain instead of ldflags ?

main.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"flag"
5+
"fmt"
56
"os"
67
"path"
78
"runtime"
@@ -15,6 +16,16 @@ import (
1516
func main() {
1617
initlog()
1718

19+
skipState := flag.Bool("skip-state", false, "Skip state")
20+
onlyOnce := flag.Bool("once", false, "run once")
21+
shVer := flag.Bool("version", false, "show version")
22+
flag.Parse()
23+
24+
if *shVer {
25+
fmt.Println(BuildVersion())
26+
return
27+
}
28+
1829
config := new(Config)
1930
config.Load("config.yml")
2031
// fmt.Println(serverconfig)
@@ -24,10 +35,6 @@ func main() {
2435

2536
state := NewState("state.json")
2637

27-
skipState := flag.Bool("skip-state", false, "Skip state")
28-
onlyOnce := flag.Bool("once", false, "run once")
29-
flag.Parse()
30-
3138
if *skipState {
3239
state.MaxId = 0
3340
}

release.sh

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
#!/bin/bash
2+
3+
MODULE=$(grep module go.mod | cut -d\ -f2)
4+
BINBASE=${MODULE##*/}
5+
VERSION=${VERSION:-$GITHUB_REF_NAME}
6+
COMMIT_HASH="$(git rev-parse --short HEAD)"
7+
BUILD_TIMESTAMP=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
8+
BUILDER=$(go version)
9+
10+
[ -d dist ] && rm -rf dist
11+
mkdir dist
12+
13+
# For version in sub module
14+
# "-X '${MODULE}/main.Version=${VERSION}'"
15+
16+
LDFLAGS=(
17+
"-X 'main.Version=${VERSION}'"
18+
"-X 'main.CommitHash=${COMMIT_HASH}'"
19+
"-X 'main.BuildTimestamp=${BUILD_TIMESTAMP}'"
20+
"-X 'main.Builder=${BUILDER}'"
21+
)
22+
23+
echo "[*] go get"
24+
go get .
25+
26+
echo "[*] go builds:"
27+
for DIST in {linux,openbsd,windows,freebsd}/{amd64,arm,arm64}; do
28+
#for DIST in linux/{amd64,386}; do
29+
GOOS=${DIST%/*}
30+
GOARCH=${DIST#*/}
31+
echo "[+] $DIST:"
32+
echo "[-] - build"
33+
SUFFIX=""
34+
[ "$GOOS" = "windows" ] && SUFFIX=".exe"
35+
TARGET=${BINBASE}-${GOOS}-${GOARCH}
36+
env GOOS=$GOOS GOARCH=$GOARCH go build -ldflags="${LDFLAGS[*]}" -o dist/${TARGET}${SUFFIX}
37+
echo "[-] - compress"
38+
if [ "$GOOS" = "windows" ]; then
39+
(cd dist; zip -qm9 ${TARGET}.zip ${TARGET}${SUFFIX})
40+
else
41+
xz dist/${TARGET}
42+
fi
43+
done
44+
45+
echo "[*] sha256sum"
46+
(cd dist; sha256sum *) | tee ${BINBASE}.sha256sum
47+
mv ${BINBASE}.sha256sum dist/
48+
49+
#echo "[*] pack"
50+
#tar -cvf all.tar -C dist/ . && mv all.tar dist
51+
52+
echo "[*] done"

version.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
)
6+
7+
var (
8+
Version = "dev"
9+
CommitHash = "000000"
10+
BuildTimestamp = "n/a"
11+
Builder = "unkown"
12+
)
13+
14+
func BuildVersion() string {
15+
return fmt.Sprintf("phpipam2dns %s-%s build on %s using %s", Version, CommitHash, BuildTimestamp, Builder)
16+
}

0 commit comments

Comments
 (0)