diff --git a/.gitea/workflows/build.yaml b/.gitea/workflows/build.yaml index 69c1187..5b9e3c6 100644 --- a/.gitea/workflows/build.yaml +++ b/.gitea/workflows/build.yaml @@ -5,120 +5,165 @@ on: - v* jobs: - create-docker-image: + # create-release: + # runs-on: ubuntu-latest + # container: + # # image: golang:1.21 + # image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest + # needs: create-release-branch + # 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: | + # # Install jq for JSON parsing + # apt-get update && apt-get install -y jq + # git --version + # go version + # jq --version + + # - name: Build all binaries + # run: | + # cd hello_gitea + # mkdir -p bin + + # # 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 + # GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go + # GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go + # GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go + + # # Create archives + # cd bin + # 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 + + # ls -la + + # - name: Create Release + # run: | + # cd hello_gitea + # # Create release using Gitea API + # 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" + + # # Upload assets + # 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 + # 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 + + # create-docker-image: + # runs-on: ubuntu-latest + # container: + # image: docker:28.3.2-dind + # needs: create-release + # steps: + # - name: Checkout repository + # run: | + # # Install git + # 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 + + # # Setup Docker Buildx for multi-platform builds + # docker buildx create --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 + # # 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 \ + # . + + create-release-branch: runs-on: ubuntu-latest container: image: docker:28.3.2-dind + # needs: create-docker-image steps: - - name: Checkout repository + - name: Create Release Branch run: | - # Install git - 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 "========================" + # Clone repository + echo "Cloning repository..." 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 - - # Setup Docker Buildx for multi-platform builds - docker buildx create --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 - # 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 \ - . - - create-release: - runs-on: ubuntu-latest - container: - # image: golang:1.21 - image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest - needs: create-docker-image - 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: | - # Install jq for JSON parsing - apt-get update && apt-get install -y jq - git --version - go version - jq --version - - - name: Build all binaries - run: | - cd hello_gitea - mkdir -p bin - - # 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 - GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go - GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go - GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go - - # Create archives - cd bin - 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 - - ls -la - - - name: Create Release - run: | - cd hello_gitea - # Create release using Gitea API - 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" - - # Upload assets - 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 - 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 + + # Configure git + echo "Configuring git..." + git config user.email "info@direct-dev.ru" + git config user.name "Direct-Dev-Robot" + + # Check if release branch exists + echo "Checking if release branch exists..." + if git ls-remote --heads origin release | grep -q release; then + echo "Release branch exists, checking out..." + git checkout release + echo "release branch exists - pulling release branch..." + git pull origin release + else + echo "release branch does not exist - creating new release branch..." + git checkout -b release + fi + + # Reset to the tag commit + echo "Resetting to the tag commit ${{ github.ref_name }} ..." + git reset --hard ${{ github.ref_name }} + + # Push changes to release branch + echo "Pushing changes to release branch..." + git push origin release --force \ No newline at end of file diff --git a/build_image_for_runner.sh b/build-builder.sh similarity index 64% rename from build_image_for_runner.sh rename to build-builder.sh index 0a80c85..ff99eda 100644 --- a/build_image_for_runner.sh +++ b/build-builder.sh @@ -2,7 +2,7 @@ docker buildx build \ --platform linux/amd64,linux/arm64 \ - --tag ${DOCKERHUB_USERNAME}/my-build-golang-runner:latest \ + --tag "${DOCKERHUB_USERNAME:-kuznetcovay}"/my-build-golang-runner:latest \ --push \ -f Dockerfile_for_runner_image \ . \ No newline at end of file diff --git a/build.yaml b/build.yaml new file mode 100644 index 0000000..69c1187 --- /dev/null +++ b/build.yaml @@ -0,0 +1,124 @@ +name: Release Build +on: + push: + tags: + - v* + +jobs: + create-docker-image: + runs-on: ubuntu-latest + container: + image: docker:28.3.2-dind + steps: + - name: Checkout repository + run: | + # Install git + 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 + + # Setup Docker Buildx for multi-platform builds + docker buildx create --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 + # 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 \ + . + + create-release: + runs-on: ubuntu-latest + container: + # image: golang:1.21 + image: ${{ secrets.DOCKERHUB_USERNAME }}/my-build-golang-runner:latest + needs: create-docker-image + 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: | + # Install jq for JSON parsing + apt-get update && apt-get install -y jq + git --version + go version + jq --version + + - name: Build all binaries + run: | + cd hello_gitea + mkdir -p bin + + # 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 + GOOS=windows GOARCH=amd64 go build -o bin/hello-api-windows-amd64.exe main.go + GOOS=darwin GOARCH=amd64 go build -o bin/hello-api-darwin-amd64 main.go + GOOS=darwin GOARCH=arm64 go build -o bin/hello-api-darwin-arm64 main.go + + # Create archives + cd bin + 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 + + ls -la + + - name: Create Release + run: | + cd hello_gitea + # Create release using Gitea API + 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" + + # Upload assets + 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 + 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 diff --git a/main.go b/main.go index 434d02d..322879c 100644 --- a/main.go +++ b/main.go @@ -7,7 +7,7 @@ import ( "github.com/gin-gonic/gin" ) -const version = "1.0.26" +const version = "1.0.27" func main() { // Set Gin mode diff --git a/makefile b/makefile index cd967d5..7556d08 100644 --- a/makefile +++ b/makefile @@ -2,7 +2,7 @@ BIN_DIR=bin APP_NAME=hello-api -VERSION=1.0.0 +VERSION=1.0.27 build: mkdir -p $(BIN_DIR) diff --git a/scripts/release-interactive.sh b/scripts/release-interactive.sh index ca82cf9..62ea25d 100755 --- a/scripts/release-interactive.sh +++ b/scripts/release-interactive.sh @@ -37,7 +37,7 @@ get_version_interactive() { echo " Текущая версия: $CURRENT_VERSION" echo " Новая версия: $VERSION" echo "" - read -p "Продолжить? (y/N): " CONFIRM + read -r -p "Продолжить? (y/N): " CONFIRM if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then echo "❌ Релиз отменен" @@ -92,6 +92,24 @@ fi echo "✅ Версия обновлена в main.go" +# Обновляем версию в makefile +echo "📝 Обновляем версию в makefile..." +if [[ "$OSTYPE" == "darwin"* ]]; then + # macOS + sed -i '' "s/^VERSION=.*/VERSION=$VERSION/" makefile +else + # Linux + sed -i "s/^VERSION=.*/VERSION=$VERSION/" makefile +fi + +# Проверяем, что изменение применилось +if ! grep -q "^VERSION=$VERSION" makefile; then + echo "Ошибка: Не удалось обновить версию в makefile" + exit 1 +fi + +echo "✅ Версия обновлена в makefile" + # Выполняем git команды echo "📦 Добавляем изменения в git..." git add . @@ -109,6 +127,7 @@ git push --tags echo "🎉 Релиз v$VERSION успешно завершен!" echo "📋 Выполненные действия:" echo " - Обновлена версия в main.go" +echo " - Обновлена версия в makefile" echo " - Создан коммит с сообщением 'Release v$VERSION'" echo " - Создан тег v$VERSION" echo " - Изменения отправлены в удаленный репозиторий" \ No newline at end of file diff --git a/scripts/release.sh b/scripts/release.sh deleted file mode 100755 index acdd560..0000000 --- a/scripts/release.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -# Скрипт для автоматизации релиза -# Использование: ./scripts/release.sh -# Пример: ./scripts/release.sh 1.0.25 - -set -e # Остановить выполнение при ошибке - -# Проверка аргументов -if [ $# -eq 0 ]; then - echo "Ошибка: Необходимо указать версию" - echo "Использование: $0 " - echo "Пример: $0 1.0.25" - exit 1 -fi - -VERSION=$1 - -# Проверка формата версии (простая проверка) -if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "Ошибка: Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)" - exit 1 -fi - -echo "🚀 Начинаем релиз версии v$VERSION..." - -# Проверяем, что мы в git репозитории -if ! git rev-parse --git-dir > /dev/null 2>&1; then - echo "Ошибка: Не найден git репозиторий" - exit 1 -fi - -# Проверяем, что нет незакоммиченных изменений -if ! git diff-index --quiet HEAD --; then - echo "Ошибка: Есть незакоммиченные изменения. Сначала закоммитьте их." - exit 1 -fi - -# Обновляем версию в main.go -echo "📝 Обновляем версию в main.go..." -if [[ "$OSTYPE" == "darwin"* ]]; then - # macOS - sed -i '' "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go -else - # Linux - sed -i "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go -fi - -# Проверяем, что изменение применилось -if ! grep -q "const version = \"$VERSION\"" main.go; then - echo "Ошибка: Не удалось обновить версию в main.go" - exit 1 -fi - -echo "✅ Версия обновлена в main.go" - -# Выполняем git команды -echo "📦 Добавляем изменения в git..." -git add . - -echo "💾 Создаем коммит..." -git commit -m "Release v$VERSION" - -echo "🏷️ Создаем тег..." -git tag -a "v$VERSION" -m "Release v$VERSION" - -echo "🚀 Отправляем изменения и теги..." -git push -git push --tags - -echo "🎉 Релиз v$VERSION успешно завершен!" -echo "📋 Выполненные действия:" -echo " - Обновлена версия в main.go" -echo " - Создан коммит с сообщением 'Release v$VERSION'" -echo " - Создан тег v$VERSION" -echo " - Изменения отправлены в удаленный репозиторий" \ No newline at end of file