From 4a17c15d8ed45628e537319af2093cb0753871bf Mon Sep 17 00:00:00 2001 From: Hendrix-Shen Date: Thu, 9 Feb 2023 22:31:39 +0800 Subject: [PATCH] Setup CI --- .github/workflows/CI.yml | 89 +++++++++++++++++++++++++++++++++++ .github/workflows/build.yml | 44 ----------------- .github/workflows/publish.yml | 65 ------------------------- build.gradle | 43 ++++++++++++----- gradle.properties | 1 - 5 files changed, 121 insertions(+), 121 deletions(-) create mode 100644 .github/workflows/CI.yml delete mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/publish.yml diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml new file mode 100644 index 0000000..8c462b7 --- /dev/null +++ b/.github/workflows/CI.yml @@ -0,0 +1,89 @@ +name: CI +on: + push: + branches: + - 'nyan-work/dev' + +jobs: + build: + if: ${{ github.event_name == 'push' && !startsWith(github.event.ref, 'refs/tags/') && contains(github.event.head_commit.message, '[build skip]') == false }} + strategy: + matrix: + java: [ 17 ] + os: [ ubuntu-latest ] + runs-on: ${{ matrix.os }} + steps: + - name: Checkout the sources + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Set up JDK ${{ matrix.java }} + uses: actions/setup-java@v3 + with: + distribution: 'adopt' + java-version: ${{ matrix.java }} + + - name: Cache Gradle packages + uses: actions/cache@v3 + with: + path: | + ~/.gradle/caches + ./.gradle/loom-caches + ~/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} + + - name: Get short commit sha + id: get_short_sha + run: | + short_sha=$(echo ${GITHUB_SHA} | cut -c1-7) + echo "short_sha=$short_sha" >> $GITHUB_OUTPUT + + - name: Get commit count + id: get_commit_count + run: | + commit_count=$(git log | grep -e 'commit [a-zA-Z0-9]*' | wc -l) + echo "commit_count=$commit_count" >> $GITHUB_OUTPUT + + - name: Read Properties mod info + id: mod_info + uses: christian-draeger/read-properties@1.1.1 + with: + path: gradle.properties + properties: 'mod_name mod_version' + + - name: Grant execute permission for gradlew + run: chmod +x gradlew + + - name: Preprocess sources + env: + BUILD_TYPE: "BETA" + run: ./gradlew preprocessResources --stacktrace + + - name: Publish Maven with Gradle + env: + BUILD_TYPE: "BETA" + run: ./gradlew build --stacktrace + + - name: Upload assets to GitHub Action + uses: actions/upload-artifact@v3 + with: + name: "${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}" + path: | + LICENSE + fabricWrapper/build/libs/*.jar + fabricWrapper/build/tmp/submods/META-INF/jars/*.jar + + - name: Create Github release + if: contains(github.event.head_commit.message, '[publish skip]') == false && contains(github.event.ref, 'refs/heads/exp') == false + uses: softprops/action-gh-release@v1 + with: + prerelease: true + files: | + LICENSE + fabricWrapper/build/libs/*.jar + fabricWrapper/build/tmp/submods/META-INF/jars/*.jar + name: "[CI#${{ github.run_number }}]${{ steps.mod_info.outputs.mod_name }} ${{ steps.mod_info.outputs.mod_version }}.${{ steps.get_commit_count.outputs.commit_count }}+${{ steps.get_short_sha.outputs.short_sha }}" + tag_name: "${{ github.ref_name }}.${{ github.run_number }}" + target_commitish: ${{ github.event.ref }} + generate_release_notes: true \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 758972d..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: build -on: [ pull_request, push ] - -jobs: - build: - strategy: - matrix: - # Use these Java versions - java: [ 17 ] - # and run on both Linux and Windows - os: [ ubuntu-20.04 ] - runs-on: ${{ matrix.os }} - steps: - - name: checkout repository - uses: actions/checkout@v3 - - name: validate gradle wrapper - uses: gradle/wrapper-validation-action@v1 - - name: setup jdk ${{ matrix.java }} - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: ${{ matrix.java }} - - name: Set pre_release - run: | - sed -i "s/pre_release=alpha/pre_release=beta/g" gradle.properties - - name: make gradle wrapper executable - if: ${{ runner.os != 'Windows' }} - run: chmod +x ./gradlew - - name: preprocessResources - run: ./gradlew preprocessResources - - name: build - run: ./gradlew build - - name: Find correct JAR - id: findjar - if: ${{ runner.os == 'Linux' && matrix.java == '17' }} - run: | - output="$(find fabricWrapper/build/libs/ ! -name "*-dev.jar" ! -name "*-sources.jar" -type f -printf "%f\n")" - echo "::set-output name=jarname::$output" - - name: capture build artifacts - if: ${{ runner.os == 'Linux' && matrix.java == '17' }} - uses: actions/upload-artifact@v3 - with: - name: ${{ steps.findjar.outputs.jarname }} - path: fabricWrapper/build/libs/${{ steps.findjar.outputs.jarname }} \ No newline at end of file diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml deleted file mode 100644 index 434bf1e..0000000 --- a/.github/workflows/publish.yml +++ /dev/null @@ -1,65 +0,0 @@ -name: Publish Release -on: - release: - types: - - published -jobs: - build: - strategy: - matrix: - java: [ 17 ] - os: [ ubuntu-20.04 ] - runs-on: ${{ matrix.os }} - steps: - - name: checkout repository - uses: actions/checkout@v3 - - name: validate gradle wrapper - uses: gradle/wrapper-validation-action@v1 - - name: setup jdk ${{ matrix.java }} - uses: actions/setup-java@v3 - with: - distribution: 'adopt' - java-version: ${{ matrix.java }} - - name: Set pre_release - run: | - sed -i "s/pre_release=alpha/pre_release=/g" gradle.properties - - name: make gradle wrapper executable - if: ${{ runner.os != 'Windows' }} - run: chmod +x ./gradlew - - name: preprocessResources - run: ./gradlew preprocessResources - - name: build - run: ./gradlew build - - name: Publish Minecraft Mods - uses: Kir-Antipov/mc-publish@v3.2 - if: ${{ runner.os == 'Linux' && matrix.java == '17' }} - with: - modrinth-id: oQgSAEhD - modrinth-token: ${{ secrets.MODRINTH }} - - curseforge-id: 454900 - curseforge-token: ${{ secrets.CF_API_TOKEN }} - - github-token: ${{ secrets.GITHUB_TOKEN }} - - files-primary: fabricWrapper/build/libs/!(*-@(dev|sources)).jar - files-secondary: fabricWrapper/build/tmp/submods/META-INF/jars/!(*-@(dev|sources)).jar - - name: '' - - version-type: release - changelog: ${{ github.event.release.body }} - - loaders: fabric - game-versions: | - 1.14.4 - 1.15.2 - 1.16.5 - 1.17.1 - 1.18.2 - 1.19.3 - - version-resolver: exact - - retry-attempts: 3 - retry-delay: 10000 \ No newline at end of file diff --git a/build.gradle b/build.gradle index 09cb4a2..14e891a 100644 --- a/build.gradle +++ b/build.gradle @@ -22,20 +22,41 @@ preprocess { mc118.link(mc119, file("versions/mapping-1.18.2-1.19.2.txt")) } -String realVersion = "${project.mod_version}" - -if (project.pre_release != "") { - realVersion += "-${project.pre_release}+" - realVersion += grgit.head().abbreviatedId -} - -version = realVersion - -task cleanPreprocessSources { +tasks.register('cleanPreprocessSources') { doFirst { subprojects { def path = project.projectDir.toPath().resolve('build/preprocessed') path.toFile().deleteDir() } } -} \ No newline at end of file +} + +String getVersionGit(List paths) { + if (grgit == null) { + return "nogit" + } + List latestCommits = paths.isEmpty() ? grgit.log(maxCommits: 1) : grgit.log(paths: paths, maxCommits: 1) + return latestCommits.isEmpty() ? "uncommited" : "${latestCommits.get(0).id.substring(0, 7)}" +} + +String getVersionType() { + Map ENV = System.getenv() + switch (ENV.BUILD_TYPE) { + case "RELEASE": + return "stable" + case "BETA": + return "beta" + default: + return "dev" + } +} + +int getVersionPatch(List paths) { + if (grgit == null) { + return 0 + } + List latestCommits = paths.isEmpty() ? grgit.log() : grgit.log(paths: paths) + return latestCommits.size() +} + +setVersion("${project.mod_version}.${getVersionPatch([])}+${getVersionGit([])}-${getVersionType()}") diff --git a/gradle.properties b/gradle.properties index 9b3d7a4..ac77b0f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,6 @@ mod_homepage=https://blog.plusls.com/ mod_sources=https://github.com/plusls/oh-my-minecraft-client mod_version=0.5 mod_license=LGPL-3 -pre_release=alpha maven_group=com.plusls archives_base_name=oh-my-minecraft-client # Deps