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