diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index d74bb34..1f80125 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -30,6 +30,13 @@ jobs: cd hello_gitea mkdir -p bin + # Build for all platforms + quick-build linux amd64 + quick-build linux arm64 + quick-build windows amd64 + quick-build darwin amd64 + quick-build darwin arm64 + # Build for all platforms GOOS=linux GOARCH=amd64 go build -o bin/hello-api-linux-amd64 main.go GOOS=linux GOARCH=arm64 go build -o bin/hello-api-linux-arm64 main.go diff --git a/Dockerfile.builder b/Dockerfile.builder index 5bd8e4d..8964866 100644 --- a/Dockerfile.builder +++ b/Dockerfile.builder @@ -9,5 +9,24 @@ RUN apt-get update && \ jq && \ rm -rf /var/lib/apt/lists/* +# Создаем рабочую директорию +WORKDIR /app + +# Копируем файлы зависимостей +COPY go.mod go.sum ./ + +# Предварительно загружаем все зависимости +RUN go mod download && go mod verify + +# Создаем скрипт для быстрой сборки +COPY scripts/quick-build.sh /usr/local/bin/quick-build + +# делаем скрипт исполняемым +RUN chmod +x /usr/local/bin/quick-build + +# Устанавливаем переменные окружения +ENV GOPATH=/go +ENV PATH=$PATH:/go/bin:/usr/local/bin + # (Опционально) Можно добавить команду по умолчанию CMD ["bash"] \ No newline at end of file diff --git a/docs/gitea-actions-guide.md b/docs/gitea-actions-guide.md index dcfce67..034d6fb 100644 --- a/docs/gitea-actions-guide.md +++ b/docs/gitea-actions-guide.md @@ -424,7 +424,7 @@ jobs: - Создает релиз с именем текущей версии через Gitea API - Загружает бинарники как assets релиза -для работы данного job используется кастомный образ - если бы мы использовали просто golang:1.24, то при каждом запуске данного job необходимо было бы скачивать jq и устанавливаться в контейнере (возможно со временем, что то еще потребовалось бы ...) +для работы данного job используется кастомный образ - если бы мы использовали просто golang:1.24, то при каждом запуске данного job необходимо было бы скачивать jq и устанавливаться в контейнере (возможно со временем, что-то еще потребовалось бы ...) ```yaml - name: Setup Go container diff --git a/scripts/quick-build.sh b/scripts/quick-build.sh new file mode 100644 index 0000000..6e217a6 --- /dev/null +++ b/scripts/quick-build.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ ! -f go.mod ]; then + echo "go.mod not found in current directory" + exit 1 +fi + +# Проверяем, изменились ли зависимости +if [ ! -f go.sum ] || ! go mod verify >/dev/null 2>&1; then + echo "Dependencies changed, downloading..." + go mod download +fi + +# Собираем для указанной платформы +if [ -n "$1" ] && [ -n "$2" ]; then + GOOS=$1 GOARCH=$2 go build -o "hello-api-$1-$2" main.go +else + go build -o hello-api main.go +fi \ No newline at end of file