From 6cdb1be075fa3f2554954c9b4c1fcdafd333cfcd Mon Sep 17 00:00:00 2001 From: outdead Date: Wed, 9 Mar 2022 03:44:21 +0300 Subject: [PATCH] Add dockerhub lates tag --- .github/workflows/build.yml | 27 +++++++++++++++++++++++++++ .gitignore | 9 +++++---- CHANGELOG.md | 2 +- Dockerfile | 16 ---------------- Makefile | 6 ++++++ build/docker/.env.dist | 1 + build/docker/Dockerfile | 25 +++++++++++++++++++++++++ main.go => cmd/gorcon/main.go | 0 scripts/docker/docker.mk | 28 ++++++++++++++++++++++++++++ release.sh => scripts/local/build.sh | 22 ++++++++++++---------- scripts/local/local.mk | 16 ++++++++++++++++ scripts/local/run.sh | 3 +++ scripts/scripts.mk | 2 ++ 13 files changed, 126 insertions(+), 31 deletions(-) delete mode 100644 Dockerfile create mode 100644 Makefile create mode 100644 build/docker/.env.dist create mode 100644 build/docker/Dockerfile rename main.go => cmd/gorcon/main.go (100%) create mode 100644 scripts/docker/docker.mk rename release.sh => scripts/local/build.sh (71%) create mode 100644 scripts/local/local.mk create mode 100755 scripts/local/run.sh create mode 100644 scripts/scripts.mk diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 4bdaa47..7cc2afb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,3 +47,30 @@ jobs: - name: Build run: go build -v . + + docker-release: + name: Docker Release + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to docker.io + run: docker login -u outdead -p ${{ secrets.GORCON_DOCKER_TOKEN }} + + - name: Build and publish + uses: docker/build-push-action@v2 + with: + context: . + file: build/docker/Dockerfile + push: true + build-args: | + VERSION=0.0.0-develop + tags: | + outdead/rcon:latest diff --git a/.gitignore b/.gitignore index 077b666..8ecad63 100644 --- a/.gitignore +++ b/.gitignore @@ -1,9 +1,10 @@ .idea/ .vscode/ + vendor/ -release/ -logs/ + *local.yaml -rcon-cli -rcon-cli.exe +gorcon *.log +.tmp/ +.env diff --git a/CHANGELOG.md b/CHANGELOG.md index 06bac07..ea8f193 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. ## [Unreleased] ### Added -- Added `--timeout, -T` flag, allowed to set dial and execute timeout. +- Added `--timeout, -T` flag, allowed to set dial and execute timeout. ## [v0.10.1] - 2021-11-13 ### Fixed diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index c994f05..0000000 --- a/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -FROM golang:alpine as golang -WORKDIR /go/src/app -COPY . . -ARG VERSION=docker -RUN CGO_ENABLED=0 go install -ldflags "-s -w -X main.Version=${VERSION}" - -FROM scratch -MAINTAINER Pavel Korotkiy - -COPY LICENSE / -COPY README.md / -COPY CHANGELOG.md / -COPY rcon.yaml / -COPY --from=golang /go/bin/rcon-cli /rcon - -CMD ["/rcon"] \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ca0b652 --- /dev/null +++ b/Makefile @@ -0,0 +1,6 @@ +include scripts/*.mk + +.DEFAULT_GOAL := nothing + +nothing: + @echo "nothing to do" diff --git a/build/docker/.env.dist b/build/docker/.env.dist new file mode 100644 index 0000000..6a2d447 --- /dev/null +++ b/build/docker/.env.dist @@ -0,0 +1 @@ +VERSION=docker diff --git a/build/docker/Dockerfile b/build/docker/Dockerfile new file mode 100644 index 0000000..89b1d9a --- /dev/null +++ b/build/docker/Dockerfile @@ -0,0 +1,25 @@ +# Stage 1 - Build the code. +FROM golang:1.16.7-alpine as builder + +RUN apk --no-cache add --update gcc musl-dev + +ARG VERSION=docker + +WORKDIR /build +COPY cmd cmd +COPY internal internal +COPY go.mod . +COPY go.sum . +RUN CGO_ENABLED=1 go build -ldflags "-s -w -X main.ServiceVersion=${VERSION}" -o gorcon ./cmd/gorcon/main.go + +# Stage 2 - Create image. +FROM alpine as runner +MAINTAINER Pavel Korotkiy + +COPY LICENSE / +COPY README.md / +COPY CHANGELOG.md / +COPY rcon.yaml / +COPY --from=builder /build/gorcon /rcon + +CMD ["/rcon"] diff --git a/main.go b/cmd/gorcon/main.go similarity index 100% rename from main.go rename to cmd/gorcon/main.go diff --git a/scripts/docker/docker.mk b/scripts/docker/docker.mk new file mode 100644 index 0000000..0725d39 --- /dev/null +++ b/scripts/docker/docker.mk @@ -0,0 +1,28 @@ +include build/docker/.env +export + +## If the first argument is "docker-deploy"... +#ifeq (docker-run, $(firstword $(MAKECMDGOALS))) +# # use the rest as arguments for "run" +# RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) +# # ...and turn them into do-nothing targets +# $(eval $(RUN_ARGS):;@:) +#endif + +IMAGES := `docker images --filter "dangling=true" -q --no-trunc` + +docker-clean: + docker rmi ${IMAGES} 2> /dev/null ||: + +docker-build: + docker build -f build/docker/Dockerfile \ + --build-arg VERSION="${VERSION}" \ + -t outdead/rcon . + + docker rmi ${IMAGES} 2> /dev/null ||: + +# make docker-run e=pz4 command=players +docker-run: + docker run -it --rm \ + -v $(CURDIR)/rcon-local.yaml:/rcon.yaml \ + outdead/rcon ./rcon -c rcon.yaml -e $(e) $(command) diff --git a/release.sh b/scripts/local/build.sh similarity index 71% rename from release.sh rename to scripts/local/build.sh index 3bcfaf0..0d303b6 100755 --- a/release.sh +++ b/scripts/local/build.sh @@ -1,13 +1,15 @@ #!/usr/bin/env bash VERSION="$1" -if [ -z "${VERSION}" ]; then echo "VERSION is not set. Use ./release.sh 0.0.0" >&2; exit 1; fi +if [ -z "${VERSION}" ]; then echo "VERSION is not set. Use ./build.sh 0.0.0" >&2; exit 1; fi -rm -r release -mkdir release -touch release/checksum.txt +RELEASE_DIR=".tmp/release" -function make_release() { +rm -r "${RELEASE_DIR}" +mkdir "${RELEASE_DIR}" +touch "${RELEASE_DIR}/checksum.txt" + +make_release() { local arch="$1" local os="$2" local release_name="$3" @@ -15,17 +17,17 @@ function make_release() { local ext="$4" - local dir="release/${release_name}" + local dir="${RELEASE_DIR}/${release_name}" mkdir -p "${dir}" - env GOARCH="${arch}" GOOS="${os}" CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=${VERSION}" -o "${dir}/rcon${ext}" + env GOARCH="${arch}" GOOS="${os}" CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=${VERSION}" -o "${dir}/rcon${ext}" ./cmd/gorcon/main.go cp LICENSE "${dir}" cp README.md "${dir}" cp CHANGELOG.md "${dir}" cp rcon.yaml "${dir}" - cd release/ + cd "${RELEASE_DIR}/" case "${os}" in linux | darwin) tar -zcvf "${release_name}.tar.gz" "${release_name}" @@ -37,7 +39,7 @@ function make_release() { ;; esac rm -r "${release_name}" - cd ../ + cd ../../ } make_release 386 linux "rcon-${VERSION}-i386_linux" @@ -46,4 +48,4 @@ make_release 386 windows "rcon-${VERSION}-win32" .exe make_release amd64 windows "rcon-${VERSION}-win64" .exe make_release amd64 darwin "rcon-${VERSION}-amd64_darwin" -env GOARCH="amd64" GOOS="linux" CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=${VERSION}" +env GOARCH="amd64" GOOS="linux" CGO_ENABLED=0 go build -ldflags "-s -w -X main.Version=${VERSION}" -o gorcon ./cmd/gorcon/main.go diff --git a/scripts/local/local.mk b/scripts/local/local.mk new file mode 100644 index 0000000..03007a8 --- /dev/null +++ b/scripts/local/local.mk @@ -0,0 +1,16 @@ +# If the first argument is "docker-deploy"... +ifeq (build, $(firstword $(MAKECMDGOALS))) + # use the rest as arguments for "run" + RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS)) + # ...and turn them into do-nothing targets + $(eval $(RUN_ARGS):;@:) +endif + +build: + sh scripts/local/build.sh $(RUN_ARGS) + +run: + sh scripts/local/run.sh + +lint: + golangci-lint run diff --git a/scripts/local/run.sh b/scripts/local/run.sh new file mode 100755 index 0000000..c4a98b0 --- /dev/null +++ b/scripts/local/run.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +go run cmd/gorcon/main.go -c rcon-local.yaml diff --git a/scripts/scripts.mk b/scripts/scripts.mk new file mode 100644 index 0000000..2983c0a --- /dev/null +++ b/scripts/scripts.mk @@ -0,0 +1,2 @@ +include scripts/docker/docker.mk +include scripts/local/local.mk