This commit is contained in:
commit
8b945c8f90
37
.drone.yml
Normal file
37
.drone.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: "lint"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: lint
|
||||||
|
image: koalaman/shellcheck-alpine:v0.8.0
|
||||||
|
pull: if-not-exists
|
||||||
|
commands:
|
||||||
|
- /bin/shellcheck build.sh
|
||||||
|
|
||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
type: docker
|
||||||
|
name: "build toolbox"
|
||||||
|
|
||||||
|
trigger:
|
||||||
|
event: ["tag"]
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- "lint"
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: "build toolbox"
|
||||||
|
image: "code.pztrn.name/containers/mirror/docker:26.1.1-dind"
|
||||||
|
pull: if-not-exists
|
||||||
|
privileged: true
|
||||||
|
environment:
|
||||||
|
REGISTRY: code.pztrn.name
|
||||||
|
REGISTRY_PROJECT: /containers/go-toolbox
|
||||||
|
REGISTRY_USERNAME: drone
|
||||||
|
REGISTRY_PASSWORD:
|
||||||
|
from_secret: drone_secret
|
||||||
|
commands:
|
||||||
|
- apk add --no-cache bash
|
||||||
|
- ./build.sh
|
3
.gitignore
vendored
Executable file
3
.gitignore
vendored
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
*DS_Store*
|
3
.markdownlint.json
Executable file
3
.markdownlint.json
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"line-length": false
|
||||||
|
}
|
8
.yamllint
Executable file
8
.yamllint
Executable file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
extends: default
|
||||||
|
|
||||||
|
rules:
|
||||||
|
line-length: disable
|
||||||
|
braces:
|
||||||
|
min-spaces-inside: 1
|
||||||
|
max-spaces-inside: 1
|
19
Dockerfile
Executable file
19
Dockerfile
Executable file
@ -0,0 +1,19 @@
|
|||||||
|
FROM debian:12.5-slim
|
||||||
|
|
||||||
|
COPY . /src
|
||||||
|
RUN for file in $(find /src -type f -name "*.sh"); do chmod +x $file; done
|
||||||
|
|
||||||
|
RUN /src/scripts/workers/debian.sh
|
||||||
|
RUN /src/scripts/workers/golang.sh
|
||||||
|
RUN /src/scripts/workers/dlv.sh
|
||||||
|
RUN /src/scripts/workers/golangci-lint.sh
|
||||||
|
RUN /src/scripts/workers/gofumpt.sh
|
||||||
|
RUN /src/scripts/workers/mockery.sh
|
||||||
|
RUN /src/scripts/workers/taskfile.sh
|
||||||
|
RUN /src/scripts/workers/go-junit-report.sh
|
||||||
|
|
||||||
|
RUN mkdir /home/container && chmod 0777 /home/container
|
||||||
|
|
||||||
|
ENV HOME=/home/container
|
||||||
|
ENV GOPATH=/home/container/go
|
||||||
|
ENV GOCACHE=/home/container/.cache
|
39
README.md
Executable file
39
README.md
Executable file
@ -0,0 +1,39 @@
|
|||||||
|
# Go ToolBox
|
||||||
|
|
||||||
|
Docker image with everything you might need for developing apps in Go.
|
||||||
|
|
||||||
|
**Note that for newer mac hardware you have to use Docker Desktop or amd64 virtual machine in lima/other tools!**
|
||||||
|
|
||||||
|
## What's inside
|
||||||
|
|
||||||
|
Debian 12 (slim) is used as base image.
|
||||||
|
|
||||||
|
| Binary | Version | Project | Repo |
|
||||||
|
| ----------------- | ------- | --------------- | ------------------------------------------------------------- |
|
||||||
|
| `go` | 1.22.2 | Go | |
|
||||||
|
| `golangci-lint` | 1.57.2 | golangci-lint | [External link](https://github.com/golangci/golangci-lint) |
|
||||||
|
| `gofumpt` | 0.6.0 | gofumpt | [External link](https://github.com/mvdan/gofumpt) |
|
||||||
|
| `mockery_v2` | 2.42.2 | mockery | [External link](https://github.com/vektra/mockery) |
|
||||||
|
| `task` | 3.36.0 | taskfile | [External link](https://github.com/go-task/task) |
|
||||||
|
| `go-junit-report` | 2.1.0 | go-junit-report | [External link](https://github.com/jstemmer/go-junit-report) |
|
||||||
|
| `delve` | 1.22.1 | delve | [External link](https://github.com/go-delve/delve) |
|
||||||
|
|
||||||
|
## HOME
|
||||||
|
|
||||||
|
Home directory is `/home/container`.
|
||||||
|
|
||||||
|
## Caching
|
||||||
|
|
||||||
|
Go's build cache resides in `/home/container/.cache`, `GOCACHE` environment variable is defined. You can mount it when needed in Dockerfile as:
|
||||||
|
|
||||||
|
```Dockerfile
|
||||||
|
RUN --mount=type=cache,target="$GOCACHE" go build
|
||||||
|
```
|
||||||
|
|
||||||
|
## Utilities examples
|
||||||
|
|
||||||
|
### JUnit report generation (for Gitlab)
|
||||||
|
|
||||||
|
```shell
|
||||||
|
go test -v 2>&1 ./... | go-junit-report -set-exit-code > unit-report.xml
|
||||||
|
```
|
37
build.sh
Executable file
37
build.sh
Executable file
@ -0,0 +1,37 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# build.sh checks if docker image with same sha256 exists remotely.
|
||||||
|
# if exists, do nothing, if not, build the image
|
||||||
|
|
||||||
|
commit_sha="${DRONE_COMMIT_SHA}"
|
||||||
|
image_path="${REGISTRY}${REGISTRY_PROJECT}"
|
||||||
|
|
||||||
|
if [ "${DRONE_TAG}" != "" ]; then
|
||||||
|
tag="${DRONE_TAG}"
|
||||||
|
else
|
||||||
|
tag="${DRONE_COMMIT_SHA}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Starting Docker daemon.
|
||||||
|
/usr/local/bin/dockerd --data-root=/var/lib/docker --max-concurrent-uploads 1 &
|
||||||
|
|
||||||
|
# Wait for it.
|
||||||
|
echo "* Waiting for Docker daemon to start..."
|
||||||
|
while true; do
|
||||||
|
if docker ps &>/dev/null; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "* Logging in to registry..."
|
||||||
|
docker login -u "${REGISTRY_USERNAME}" -p "${REGISTRY_PASSWORD}" "${REGISTRY}"
|
||||||
|
|
||||||
|
echo "* Building docker image ${image_path}:${tag}..."
|
||||||
|
|
||||||
|
if docker manifest inspect "${image_path}:${tag}" >/dev/null; then
|
||||||
|
echo "* Docker image ${image_path}:${tag} is already exists on remote, no rebuilt necessary."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
docker build --pull --build-arg VCS_REF="${commit_sha}" --build-arg VCS_URL="${image_path}" --tag "${image_path}:${tag}" .
|
||||||
|
docker push "${image_path}:${tag}"
|
17
scripts/helpers/arch.sh
Executable file
17
scripts/helpers/arch.sh
Executable file
@ -0,0 +1,17 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# shellcheck disable=SC2034
|
||||||
|
# Line above disables shellcheck linters:
|
||||||
|
# * SC2043 - unused variable (this file sourced elsewhere).
|
||||||
|
|
||||||
|
base_arch=$(uname -m)
|
||||||
|
arch=""
|
||||||
|
|
||||||
|
if [ "$base_arch" = "x86_64" ]; then
|
||||||
|
arch=amd64
|
||||||
|
elif [ "$base_arch" = "aarch64" ]; then
|
||||||
|
arch=arm64
|
||||||
|
else
|
||||||
|
echo "unknown arch"
|
||||||
|
exit 1
|
||||||
|
fi
|
4
scripts/workers/debian.sh
Executable file
4
scripts/workers/debian.sh
Executable file
@ -0,0 +1,4 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
apt update && apt upgrade -y
|
||||||
|
apt install -y build-essential curl file git make
|
7
scripts/workers/dlv.sh
Executable file
7
scripts/workers/dlv.sh
Executable file
@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
dlv_version=1.22.1
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
CGO_ENABLED=0 GOBIN=/usr/local/bin/ go install -ldflags "-s -w -extldflags '-static'" github.com/go-delve/delve/cmd/dlv@v"$dlv_version"
|
10
scripts/workers/go-junit-report.sh
Executable file
10
scripts/workers/go-junit-report.sh
Executable file
@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
go_junit_report_version=2.1.0
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
git clone https://github.com/jstemmer/go-junit-report.git
|
||||||
|
cd go-junit-report || exit 1
|
||||||
|
git checkout "v${go_junit_report_version}"
|
||||||
|
go build -o /usr/local/bin/go-junit-report .
|
||||||
|
rm -rf /tmp/go-junit-report
|
12
scripts/workers/gofumpt.sh
Executable file
12
scripts/workers/gofumpt.sh
Executable file
@ -0,0 +1,12 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
gofumpt_version="0.6.0"
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
cd /tmp
|
||||||
|
git clone https://github.com/mvdan/gofumpt.git
|
||||||
|
cd gofumpt || exit 1
|
||||||
|
git checkout "v${gofumpt_version}"
|
||||||
|
go build -o /usr/local/bin/gofumpt .
|
||||||
|
rm -rf /tmp/gofumpt
|
22
scripts/workers/golang.sh
Executable file
22
scripts/workers/golang.sh
Executable file
@ -0,0 +1,22 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
# Line above disables shellcheck linters:
|
||||||
|
# * SC2154 - variable referenced but not assigned (false positive, assigned when sourced arch.sh).
|
||||||
|
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
go_version=1.22.2
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086,SC2046,SC2164
|
||||||
|
cd $(dirname ${BASH_SOURCE[0]})
|
||||||
|
script_path=$(pwd)
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "${script_path}/../helpers/arch.sh"
|
||||||
|
|
||||||
|
curl "https://dl.google.com/go/go${go_version}.linux-${arch}.tar.gz" -o "/tmp/go-${arch}.tar.gz"
|
||||||
|
file "/tmp/go-${arch}.tar.gz"
|
||||||
|
tar -xf "/tmp/go-${arch}.tar.gz" -C /usr/local/
|
||||||
|
rm "/tmp/go-${arch}.tar.gz"
|
||||||
|
ln -s /usr/local/go/bin/* /usr/local/bin
|
20
scripts/workers/golangci-lint.sh
Executable file
20
scripts/workers/golangci-lint.sh
Executable file
@ -0,0 +1,20 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
# Line above disables shellcheck linters:
|
||||||
|
# * SC2154 - variable referenced but not assigned (false positive, assigned when sourced arch.sh).
|
||||||
|
|
||||||
|
golangci_lint_version=1.57.2
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086,SC2046,SC2164
|
||||||
|
cd "$(dirname ${BASH_SOURCE[0]})"
|
||||||
|
script_path=$(pwd)
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "${script_path}/../helpers/arch.sh"
|
||||||
|
|
||||||
|
curl -L "https://github.com/golangci/golangci-lint/releases/download/v${golangci_lint_version}/golangci-lint-${golangci_lint_version}-linux-${arch}.tar.gz" -o "/tmp/golangci-lint-${arch}.tar.gz"
|
||||||
|
file "/tmp/golangci-lint-${arch}.tar.gz"
|
||||||
|
tar -xf "/tmp/golangci-lint-${arch}.tar.gz" -C /tmp
|
||||||
|
mv "/tmp/golangci-lint-${golangci_lint_version}-linux-${arch}/golangci-lint" /usr/local/bin
|
||||||
|
rm -rf "/tmp/golangci-lint-${arch}.tar.gz" "/tmp/golangci-lint-${golangci_lint_version}-linux-${arch}/"
|
14
scripts/workers/mockery.sh
Executable file
14
scripts/workers/mockery.sh
Executable file
@ -0,0 +1,14 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
mockery_v2_version=2.42.2
|
||||||
|
|
||||||
|
cd /tmp || exit 1
|
||||||
|
|
||||||
|
# mockery v2 we download from releases page
|
||||||
|
arch=$(uname -m)
|
||||||
|
download_url="https://github.com/vektra/mockery/releases/download/v${mockery_v2_version}/mockery_${mockery_v2_version}_Linux_${arch}.tar.gz"
|
||||||
|
curl -L ${download_url} -o "/tmp/mockery_${arch}.tar.gz"
|
||||||
|
mkdir /tmp/mockery_v2
|
||||||
|
tar xf "/tmp/mockery_${arch}.tar.gz" -C /tmp/mockery_v2
|
||||||
|
mv /tmp/mockery_v2/mockery /usr/local/bin/mockery_v2
|
||||||
|
rm -rf "/tmp/mockery_$(uname -m).tar.gz" /tmp/mockery*
|
21
scripts/workers/taskfile.sh
Executable file
21
scripts/workers/taskfile.sh
Executable file
@ -0,0 +1,21 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# shellcheck disable=SC2154
|
||||||
|
# Line above disables shellcheck linters:
|
||||||
|
# * SC2154 - variable referenced but not assigned (false positive, assigned when sourced arch.sh).
|
||||||
|
|
||||||
|
taskfile_version=3.36.0
|
||||||
|
|
||||||
|
# shellcheck disable=SC2086,SC2046,SC2164
|
||||||
|
cd "$(dirname ${BASH_SOURCE[0]})"
|
||||||
|
script_path=$(pwd)
|
||||||
|
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source "${script_path}/../helpers/arch.sh"
|
||||||
|
|
||||||
|
curl -L "https://github.com/go-task/task/releases/download/v${taskfile_version}/task_linux_${arch}.tar.gz" -o "/tmp/taskfile-${arch}.tar.gz"
|
||||||
|
file "/tmp/taskfile-${arch}.tar.gz"
|
||||||
|
tar -xf "/tmp/taskfile-${arch}.tar.gz" -C /tmp
|
||||||
|
mv "/tmp/task" /usr/local/bin
|
||||||
|
rm -rf "/tmp/*"
|
||||||
|
ls -la /usr/local/bin
|
Loading…
Reference in New Issue
Block a user