diff --git a/.gitea/workflows/build-and-deploy.yml b/.gitea/workflows/build-and-deploy.yml new file mode 100644 index 0000000..1d83a90 --- /dev/null +++ b/.gitea/workflows/build-and-deploy.yml @@ -0,0 +1,72 @@ +name: Build and Deploy + +on: + release: + types: [published] + +env: + APP_NAME: delta-force-guide-server + +jobs: + build-and-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 21 (Corretto) + uses: actions/setup-java@v4 + with: + java-version: 21 + distribution: corretto + cache: gradle + + - name: Build with Gradle + run: > + ./gradlew bootJar -x test + -PartefactVersion="${{ gitea.event.release.tag_name }}" + -PbuildChannel=stable + + - name: Resolve JAR file path + id: jar + run: | + JAR_PATH=$(find build/libs -name '*.jar' | head -1) + echo "file=$JAR_PATH" >> "$GITHUB_OUTPUT" + + - name: Upload JAR to Gitea Release + run: | + TAG="${{ gitea.event.release.tag_name }}" + FILE="${{ steps.jar.outputs.file }}" + ASSET_NAME="${APP_NAME}-${TAG}.jar" + curl -X POST \ + -H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \ + -H "Content-Type: multipart/form-data" \ + -F "attachment=@${FILE};filename=${ASSET_NAME}" \ + "${{ gitea.server_url }}/api/v1/repos/${{ gitea.repository }}/releases/${{ gitea.event.release.id }}/assets?name=${ASSET_NAME}" + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_TOKEN }} + + - name: Generate image tags + id: meta + run: | + DOCKERHUB_USER="${{ secrets.DOCKER_HUB_USERNAME }}" + REPO_NAME=$(echo "${{ gitea.repository.name }}" | tr '[:upper:]' '[:lower:]') + echo "tag_version=${DOCKERHUB_USER}/${REPO_NAME}:${{ gitea.event.release.tag_name }}" >> "$GITHUB_OUTPUT" + echo "tag_latest=${DOCKERHUB_USER}/${REPO_NAME}:latest" >> "$GITHUB_OUTPUT" + + - name: Build and push Docker image + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile.ci + build-args: JAR_FILE=${{ steps.jar.outputs.file }} + push: true + tags: | + ${{ steps.meta.outputs.tag_version }} + ${{ steps.meta.outputs.tag_latest }} diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml deleted file mode 100644 index 116f12f..0000000 --- a/.github/workflows/build-and-deploy.yml +++ /dev/null @@ -1,86 +0,0 @@ -name: Build and Deploy - -on: - release: - types: [published] - -env: - APP_NAME: delta-force-guide-server - FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true - -jobs: - # ================================================================ - # Single Job: Build, Upload JAR to Release, and Push to GHCR - # ================================================================ - build-and-release: - runs-on: ubuntu-latest - permissions: - contents: write - packages: write - steps: - - uses: actions/checkout@v4 - - - name: Set up JDK 21 (Corretto) - uses: actions/setup-java@v4 - with: - java-version: 21 - distribution: corretto - cache: gradle - - - name: Set up Gradle - uses: gradle/actions/setup-gradle@v4 - - # 使用 Release Tag 做为 Gradle 属性传入 - - name: Build with Gradle - run: ./gradlew bootJar -x test -PartefactVersion="${{ github.event.release.tag_name }}" - - - name: Resolve JAR file path - id: jar - run: | - JAR_PATH=$(find build/libs -name '*.jar' | head -1) - echo "file=$JAR_PATH" >> "$GITHUB_OUTPUT" - - # 上传 JAR 包到 GitHub Release 中 - - name: Upload JAR to GitHub Release - uses: svenstaro/upload-release-action@v2 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ${{ steps.jar.outputs.file }} - asset_name: ${{ github.event.repository.name }}-${{ github.event.release.tag_name }}.jar - tag: ${{ github.event.release.tag_name }} - overwrite: true - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - # 登录到 GitHub Container Registry (GHCR) - - name: Log in to GHCR - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - # 镜像打标签准备 - - name: Generate image tags - id: meta - run: | - OWNER_LC=$(echo "${{ github.repository_owner }}" | tr '[:upper:]' '[:lower:]') - REPO_LC=$(echo "${{ github.event.repository.name }}" | tr '[:upper:]' '[:lower:]') - echo "tag_version=ghcr.io/$OWNER_LC/$REPO_LC:${{ github.event.release.tag_name }}" >> "$GITHUB_OUTPUT" - echo "tag_latest=ghcr.io/$OWNER_LC/$REPO_LC:latest" >> "$GITHUB_OUTPUT" - - # 构建并上传镜像到 GHCR - - name: Build and push Docker image - uses: docker/build-push-action@v6 - with: - context: . - file: Dockerfile.ci - build-args: JAR_FILE=${{ steps.jar.outputs.file }} - push: true - tags: | - ${{ steps.meta.outputs.tag_version }} - ${{ steps.meta.outputs.tag_latest }} - cache-from: type=gha - cache-to: type=gha,mode=max -