2 Commits

Author SHA1 Message Date
9da418648c changed builder image
All checks were successful
Build Builder Docker Image / create-builder-docker-image (push) Successful in 5m42s
2025-07-28 16:02:16 +06:00
7a33e815af Release v1.0.31
All checks were successful
Release Build / create-release (push) Successful in 6m27s
Release Build / create-docker-image (push) Successful in 3m32s
Release Build / update-to-release-branch (push) Successful in 8s
2025-07-28 15:47:12 +06:00
7 changed files with 67 additions and 12 deletions

View File

@@ -34,7 +34,7 @@ jobs:
docker --version
# Setup Docker Buildx for multi-platform builds
echo "setup buildx"
docker buildx create --use
docker buildx create --name builder-builx --use
docker buildx inspect --bootstrap
- name: Login to Docker Hub
@@ -52,4 +52,8 @@ jobs:
--tag ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest \
--push \
-f Dockerfile.builder \
.
.
- name: Remove buildx
run: |
docker buildx rm builder-builx

View File

@@ -9,8 +9,7 @@ jobs:
runs-on: ubuntu-latest
container:
# image: golang:1.21
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
needs: create-release-branch
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
steps:
- name: Checkout repository
run: |
@@ -31,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

View File

@@ -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"]

View File

@@ -245,8 +245,7 @@ jobs:
runs-on: ubuntu-latest
container:
# image: golang:1.21
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
needs: create-release-branch
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
steps:
- name: Checkout repository
run: |
@@ -418,14 +417,14 @@ jobs:
1 **create-release:**
- Запускается первым
- Эта таска запускается первой и не требует никаких зависимых тасков выполненными
- Использует контейнер собранный на базе golang:1.24 для сборки бинарников (image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest)
- Собирает бинарники для всех платформ (Linux, Windows, macOS)
- Создает архивы с бинарниками
- Создает релиз с именем текущей версии через Gitea API
- Загружает бинарники как assets релиза
для работы данного job используется кастомный образ - если бы мы использовали просто golang:1.24, то при каждом запуске данного job необходимо было бы скачивать jq и устанавливаться в контейнере (возможно со временем что то еще потребовалось бы)
для работы данного job используется кастомный образ - если бы мы использовали просто golang:1.24, то при каждом запуске данного job необходимо было бы скачивать jq и устанавливаться в контейнере (возможно со временем, что-то еще потребовалось бы ...)
```yaml
- name: Setup Go container
@@ -507,7 +506,7 @@ jobs:
docker --version
# Setup Docker Buildx for multi-platform builds
echo "setup buildx"
docker buildx create --use
docker buildx create --name builder-builx --use
docker buildx inspect --bootstrap
- name: Login to Docker Hub
@@ -526,6 +525,10 @@ jobs:
--push \
-f Dockerfile.builder \
.
- name: Remove buildx
run: |
docker buildx rm builder-builx
```
эта задача будет запущена на ранере при пуше тега с префиксом `builder-`

View File

@@ -1,13 +1,14 @@
package main
import (
"log"
"net/http"
"os"
"github.com/gin-gonic/gin"
)
const version = "1.0.30"
const version = "1.0.31"
func main() {
// Set Gin mode
@@ -83,5 +84,8 @@ func main() {
}
// Start server
r.Run(":" + port)
err := r.Run(":" + port)
if err != nil {
log.Fatal(err)
}
}

View File

@@ -2,7 +2,7 @@
BIN_DIR=bin
APP_NAME=hello-api
VERSION=1.0.30
VERSION=1.0.31
build:
mkdir -p $(BIN_DIR)

19
scripts/quick-build.sh Normal file
View File

@@ -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