Files
hello_gitea/.gitea/workflows/build.yaml
Anton Kuznetcov 609c866c47
All checks were successful
Conditional Release Build / update-to-release-branch (push) Has been skipped
Conditional Release Build / debug-conditions (push) Successful in 5s
Conditional Release Build / create-release (push) Has been skipped
Conditional Release Build / create-docker-image (push) Has been skipped
Release v1.0.50
2025-07-28 18:58:33 +06:00

196 lines
7.2 KiB
YAML

name: Conditional Release Build
on:
push:
tags:
- v*
env:
# Можно переопределить через секреты или переменные
BUILD_CREATE_RELEASE: ${{ secrets.BUILD_CREATE_RELEASE || vars.BUILD_CREATE_RELEASE || '1' }}
BUILD_CREATE_DOCKER_IMAGE: ${{ secrets.BUILD_CREATE_DOCKER_IMAGE || vars.BUILD_CREATE_DOCKER_IMAGE || '1' }}
BUILD_UPDATE_RELEASE_BRANCH: ${{ secrets.BUILD_UPDATE_RELEASE_BRANCH || vars.BUILD_UPDATE_RELEASE_BRANCH || '1' }}
jobs:
debug-conditions:
runs-on: ubuntu-latest
steps:
- name: Show build conditions
run: |
echo "Build conditions:"
echo " BUILD_CREATE_RELEASE: $BUILD_CREATE_RELEASE"
echo " BUILD_CREATE_DOCKER_IMAGE: $BUILD_CREATE_DOCKER_IMAGE"
echo " BUILD_UPDATE_RELEASE_BRANCH: $BUILD_UPDATE_RELEASE_BRANCH"
create-release:
runs-on: ubuntu-latest
if: env.BUILD_CREATE_RELEASE == '1'
container:
image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest
steps:
- name: Checkout repository
run: |
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
cd hello_gitea
git checkout ${{ github.ref }}
- name: Setup Go
run: |
git --version
go version
jq --version
- name: Build all binaries
run: |
cd hello_gitea
# Проверяем, изменились ли зависимости
if [ ! -f go.sum ] || ! go mod verify >/dev/null 2>&1; then
echo "Dependencies changed, downloading..."
go mod download
fi
mkdir -p bin
echo "Building for all platforms..."
# Build for all platforms using direct go build commands
echo "Building for linux amd64..."
GOOS=linux GOARCH=amd64 go build -o bin/hello-api-linux-amd64 main.go
echo "Building for linux arm64..."
GOOS=linux GOARCH=arm64 go build -o bin/hello-api-linux-arm64 main.go
echo "Building for windows amd64..."
GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go
echo "Building for darwin amd64..."
GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go
echo "Building for darwin arm64..."
GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go
# Create archives
echo "Creating archives..."
cd bin
# Create archives with correct file names
tar -czf hello-api-linux-amd64.tar.gz hello-api-linux-amd64
tar -czf hello-api-linux-arm64.tar.gz hello-api-linux-arm64
tar -czf hello-api-windows-amd64.tar.gz hello-api-windows-amd64.exe
tar -czf hello-api-darwin-amd64.tar.gz hello-api-darwin-amd64
tar -czf hello-api-darwin-arm64.tar.gz hello-api-darwin-arm64
echo "Listing bin directory..."
ls -la
- name: Create Release
run: |
cd hello_gitea
# Create release using Gitea API
echo "Creating release..."
curl -X POST \
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
-H "Content-Type: application/json" \
-d '{
"tag_name": "${{ github.ref_name }}",
"name": "Release ${{ github.ref_name }}",
"body": "Automated release with multi-platform binaries and Docker image",
"draft": false,
"prerelease": false
}' \
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases"
echo "Getting release id..."
RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.GITEATOKEN }}" \
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/tags/${{ github.ref_name }}" | \
jq -r '.id')
# Upload all binaries
echo "Uploading assets..."
for file in bin/*.tar.gz; do
echo "Uploading $file..."
curl -X POST \
-H "Authorization: token ${{ secrets.GITEATOKEN }}" \
-H "Content-Type: application/octet-stream" \
--data-binary @$file \
"https://direct-dev.ru/gitea/api/v1/repos/GiteaAdmin/hello_gitea/releases/$RELEASE_ID/assets?name=$(basename $file)"
done
echo "Release created successfully"
create-docker-image:
runs-on: ubuntu-latest
# needs: create-release
if: env.BUILD_CREATE_DOCKER_IMAGE == '1'
container:
image: docker:28.3.2-dind
steps:
- name: Checkout repository
run: |
apk add --no-cache git
echo "=== GitHub Variables ==="
echo "github.ref = ${{ github.ref }}"
echo "github.ref_name = ${{ github.ref_name }}"
echo "github.sha = ${{ github.sha }}"
echo "github.repository = ${{ github.repository }}"
echo "========================"
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
cd hello_gitea
git checkout ${{ github.ref }}
- name: Setup Docker Buildx
run: |
# Docker is already installed in docker:dind image
docker --version
echo "Setting up Docker Buildx for multi-platform builds..."
# Setup Docker Buildx for multi-platform builds
docker buildx create --name go-buildx --use
docker buildx inspect --bootstrap
- name: Login to Docker Hub
run: |
echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
- name: Build multi-platform Docker images
run: |
cd hello_gitea
echo "Building multi-platform images using buildx..."
# Build multi-platform images using buildx
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:${{ github.ref_name }} \
--tag ${{ secrets.DOCKERHUB_USERNAME }}/hello-api:latest \
--push \
.
echo "Multi-platform images built successfully"
- name: Remove buildx
run: |
echo "Removing buildx..."
docker buildx rm go-buildx
update-to-release-branch:
runs-on: ubuntu-latest
# needs: create-docker-image
if: env.BUILD_UPDATE_RELEASE_BRANCH == '1'
container:
image: docker:28.3.2-dind
steps:
- name: Create Release Branch
run: |
apk add --no-cache git
git clone https://oauth2:${{ secrets.GITEATOKEN }}@direct-dev.ru/gitea/GiteaAdmin/hello_gitea.git hello_gitea
cd hello_gitea
git config user.email "info@direct-dev.ru"
git config user.name "Direct-Dev-Robot"
if git ls-remote --heads origin release | grep -q release; then
git checkout release
git pull origin release
else
git checkout -b release
fi
git reset --hard ${{ github.ref_name }}
git push origin release --force