diff --git a/.github/scripts/release-gradle.sh b/.github/scripts/release-gradle.sh deleted file mode 100755 index 9c4904fc8..000000000 --- a/.github/scripts/release-gradle.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/usr/bin/env bash -set -ex - -POM_VERSION=$(gradle properties -q | grep "version:" | awk '{print $2}') -RELEASE_DIR="build/github_release" - -mkdir "${RELEASE_DIR}" - -ln -s "../libs/plantuml-${POM_VERSION}.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}.jar" -ln -s "../libs/plantuml-${POM_VERSION}-javadoc.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-javadoc.jar" -ln -s "../libs/plantuml-${POM_VERSION}-sources.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-sources.jar" -ln -s "../libs/plantuml-pdf-${POM_VERSION}.jar" "${RELEASE_DIR}/plantuml-pdf-${POM_VERSION}.jar" - -if [[ -e "build/publications/maven/module.json.asc" ]]; then - # signatures are optional so that forked repos can release snapshots without needing a gpg signing key - ln -s "../libs/plantuml-${POM_VERSION}.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}.jar.asc" - ln -s "../libs/plantuml-${POM_VERSION}-javadoc.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}-javadoc.jar.asc" - ln -s "../libs/plantuml-${POM_VERSION}-sources.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}-sources.jar.asc" - ln -s "../libs/plantuml-pdf-${POM_VERSION}.jar.asc" "${RELEASE_DIR}/plantuml-pdf-${POM_VERSION}.jar.asc" -fi - -gh release create \ - --target "${GITHUB_SHA}" \ - --title "${TAG}" \ - "${TAG}" ${RELEASE_DIR}/* - -echo "::notice title=::Released at ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${TAG} 🎉" diff --git a/.github/scripts/release-gradle-snapshot.sh b/.github/scripts/release-snapshot.sh similarity index 100% rename from .github/scripts/release-gradle-snapshot.sh rename to .github/scripts/release-snapshot.sh diff --git a/.github/scripts/release.sh b/.github/scripts/release.sh index e18a1487e..9c4904fc8 100755 --- a/.github/scripts/release.sh +++ b/.github/scripts/release.sh @@ -1,14 +1,23 @@ #!/usr/bin/env bash set -ex -RELEASE_DIR="target/github_release" +POM_VERSION=$(gradle properties -q | grep "version:" | awk '{print $2}') +RELEASE_DIR="build/github_release" mkdir "${RELEASE_DIR}" -ln -s "../plantuml.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}.jar" -ln -s "../plantuml-javadoc.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-javadoc.jar" -ln -s "../plantuml-sources.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-sources.jar" -# we do not release the .pom or .asc signature files here, they will be added in a later PR +ln -s "../libs/plantuml-${POM_VERSION}.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}.jar" +ln -s "../libs/plantuml-${POM_VERSION}-javadoc.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-javadoc.jar" +ln -s "../libs/plantuml-${POM_VERSION}-sources.jar" "${RELEASE_DIR}/plantuml-${POM_VERSION}-sources.jar" +ln -s "../libs/plantuml-pdf-${POM_VERSION}.jar" "${RELEASE_DIR}/plantuml-pdf-${POM_VERSION}.jar" + +if [[ -e "build/publications/maven/module.json.asc" ]]; then + # signatures are optional so that forked repos can release snapshots without needing a gpg signing key + ln -s "../libs/plantuml-${POM_VERSION}.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}.jar.asc" + ln -s "../libs/plantuml-${POM_VERSION}-javadoc.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}-javadoc.jar.asc" + ln -s "../libs/plantuml-${POM_VERSION}-sources.jar.asc" "${RELEASE_DIR}/plantuml-${POM_VERSION}-sources.jar.asc" + ln -s "../libs/plantuml-pdf-${POM_VERSION}.jar.asc" "${RELEASE_DIR}/plantuml-pdf-${POM_VERSION}.jar.asc" +fi gh release create \ --target "${GITHUB_SHA}" \ diff --git a/.github/scripts/release_snapshot.sh b/.github/scripts/release_snapshot.sh deleted file mode 100755 index 53dfd0efb..000000000 --- a/.github/scripts/release_snapshot.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -set -ex - -TAG="snapshot" -DATE_TIME_UTC=$(date -u +"%F at %T (UTC)") -RELEASE_DIR="target/github_release" - -gh release delete "${TAG}" -y || true - -git tag --force "${TAG}" - -git push --force origin "${TAG}" - -mkdir "${RELEASE_DIR}" - -ln -s "../plantuml.pom" "${RELEASE_DIR}/plantuml-SNAPSHOT.pom" -ln -s "../plantuml.jar" "${RELEASE_DIR}/plantuml-SNAPSHOT.jar" -ln -s "../plantuml-javadoc.jar" "${RELEASE_DIR}/plantuml-SNAPSHOT-javadoc.jar" -ln -s "../plantuml-sources.jar" "${RELEASE_DIR}/plantuml-SNAPSHOT-sources.jar" - -if [[ -e "target/plantuml.pom.asc" ]]; then - # signatures are optional so that forked repos can release snapshots without needing a gpg signing key - ln -s "../plantuml.pom.asc" "${RELEASE_DIR}/plantuml-SNAPSHOT.pom.asc" - ln -s "../plantuml.jar.asc" "${RELEASE_DIR}/plantuml-SNAPSHOT.jar.asc" - ln -s "../plantuml-javadoc.jar.asc" "${RELEASE_DIR}/plantuml-SNAPSHOT-javadoc.jar.asc" - ln -s "../plantuml-sources.jar.asc" "${RELEASE_DIR}/plantuml-SNAPSHOT-sources.jar.asc" -fi - -echo -n "${DATE_TIME_UTC}" > "${RELEASE_DIR}/plantuml-SNAPSHOT.timestamp" - -cat <<-EOF >notes.txt - This is a pre-release of [the latest development work](https://github.com/plantuml/plantuml/commits/). - ⚠️ **It is not ready for general use** ⚠️ - ⏱ _Snapshot taken the ${DATE_TIME_UTC}_ -EOF - -gh release create \ - --prerelease \ - --target "${GITHUB_SHA}" \ - --title "${TAG}" \ - --notes-file notes.txt \ - "${TAG}" ${RELEASE_DIR}/* - -echo "::notice title=release snapshot::Snapshot released at ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/releases/tag/${TAG} and taken the ${DATE_TIME_UTC}" diff --git a/.github/workflows/ci-gradle.yml b/.github/workflows/ci-gradle.yml deleted file mode 100644 index e8341ab50..000000000 --- a/.github/workflows/ci-gradle.yml +++ /dev/null @@ -1,150 +0,0 @@ -name: CI gradle - -on: - create: - pull_request: - types: [ opened, synchronize, reopened ] - paths-ignore: - - '*.md' - - 'docs/**' - push: - branches: - - master - paths-ignore: - - '*.md' - - 'docs/**' - workflow_dispatch: - -defaults: - run: - shell: bash - -jobs: - workflow_config: - runs-on: ubuntu-latest - outputs: - do_release: ${{ steps.config.outputs.do_release }} - do_snapshot_release: ${{ steps.config.outputs.do_snapshot_release }} - pom_version: ${{ steps.config.outputs.pom_version }} - steps: - - name: Configure workflow - id: config - env: - ACTOR: ${{ github.actor }} - EVENT_ACTION: ${{ github.event.action }} - REF_TYPE: ${{ github.event.ref_type }} - REF: ${{ github.event.ref }} - run: | - cat <<-EOF - ::group::Debug Info - GITHUB_EVENT_NAME : '${GITHUB_EVENT_NAME}' - EVENT_ACTION : '${EVENT_ACTION}' - REF_TYPE : '${REF_TYPE}' - REF : '${REF}' - ACTOR : '${ACTOR}' - GITHUB_REPOSITORY_OWNER : '${GITHUB_REPOSITORY_OWNER}' - ::endgroup:: - EOF - - # Do a release when a git tag starting with 'v' has been created by a suitable user. - # (We match against github.repository_owner as a kludge so that forked repos can release themselves when testing the workflow) - - if [[ "${GITHUB_EVENT_NAME}" == "create" && "${REF_TYPE}" == "tag" && "${REF}" == v* && \ - ( "${ACTOR}" == "arnaudroques" || "${ACTOR}" == "${GITHUB_REPOSITORY_OWNER}" ) \ - ]]; then - echo "::notice title=::This run will release '${REF}'" - echo "::set-output name=do_release::true" - echo "::set-output name=pom_version::${REF#v}" # pom_version is the tag without the 'v' prefix - - elif [[ "${GITHUB_EVENT_NAME}" =~ push|workflow_dispatch && "${REF}" == "refs/heads/master" ]]; then - echo "::notice title=::This run will release a snapshot" - echo "::set-output name=do_snapshot_release::true" - - else - echo "This run will NOT make a release" - fi - - # We run the tests on many OS / Java combinations but also the Compile step because some users build - # their own jars from source, so it is good for CI to check that is working on all combinations. - test: - needs: workflow_config - strategy: - fail-fast: false - matrix: - java_version: [ 8, 11, 17 ] - os: [ macos-10.15, macos-11, ubuntu-18.04, ubuntu-20.04, windows-2019, windows-2022 ] - runs-on: ${{ matrix.os }} - steps: - - name: Checkout the repository - uses: actions/checkout@v2 - - - name: Set up java - uses: actions/setup-java@v2.5.0 - with: - java-version: ${{ matrix.java_version }} - distribution: temurin - cache: gradle - - # Compile / Test / Package are separate steps so the reason for any failure is more obvious in GitHub UI - - name: Compile - run: gradle -q compileJava --no-daemon - - - name: Test - run: gradle -q test --no-daemon - - upload: - needs: [ workflow_config, test ] - runs-on: ubuntu-latest - steps: - - name: Checkout the repository - uses: actions/checkout@v2 - - - name: Set up java - uses: actions/setup-java@v2.5.0 - with: - java-version: 17 - distribution: temurin - cache: gradle - - - name: Set version from tag - if: env.POM_VERSION - env: - POM_VERSION: ${{ needs.workflow_config.outputs.pom_version }} - run: sed -i "s/version = .*/version = $POM_VERSION/" gradle.properties - - - name: Build artifacts - run: | - gradle -q clean build \ - pdfJar \ - generateMetadataFileForMavenPublication generatePomFileForMavenPublication \ - -x test - - - name: Sign artifacts - if: env.ORG_GRADLE_PROJECT_signingKey - env: - ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ARTIFACT_SIGNING_KEY }} - ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ARTIFACT_SIGNING_PASSPHRASE }} - run: | - gradle -q signMavenPublication signPdfJar - - - name: Upload artifacts - uses: actions/upload-artifact@v2 - with: - # Using github.run_number here to reduce confusion when downloading & comparing artifacts from several builds - name: ${{ github.run_number }}-artifacts - path: | - build/libs/* - build/publications/maven/* - - - name: Create snapshot release - if: needs.workflow_config.outputs.do_snapshot_release == 'true' - env: - GITHUB_TOKEN: ${{ github.token }} - run: .github/scripts/release-gradle-snapshot.sh - - - name: Create release in GitHub - if: needs.workflow_config.outputs.do_release == 'true' - env: - GITHUB_TOKEN: ${{ github.token }} - TAG: ${{ github.event.ref }} - run: .github/scripts/release-gradle.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 022efe2b7..ba1cd0921 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,18 +1,18 @@ name: CI on: -# create: -# pull_request: -# types: [ opened, synchronize, reopened ] -# paths-ignore: -# - '*.md' -# - 'docs/**' -# push: -# branches: -# - master -# paths-ignore: -# - '*.md' -# - 'docs/**' + create: + pull_request: + types: [ opened, synchronize, reopened ] + paths-ignore: + - '*.md' + - 'docs/**' + push: + branches: + - master + paths-ignore: + - '*.md' + - 'docs/**' workflow_dispatch: defaults: @@ -66,115 +66,85 @@ jobs: # We run the tests on many OS / Java combinations but also the Compile step because some users build # their own jars from source, so it is good for CI to check that is working on all combinations. - build: + test: needs: workflow_config strategy: fail-fast: false matrix: java_version: [ 8, 11, 17 ] os: [ macos-10.15, macos-11, ubuntu-18.04, ubuntu-20.04, windows-2019, windows-2022 ] - include: - - release_from_this_build: true - os: ubuntu-20.04 - java_version: 8 runs-on: ${{ matrix.os }} - env: - SIGN_ARTIFACTS: ${{ secrets.ARTIFACT_SIGNING_KEY != '' }} steps: - name: Checkout the repository uses: actions/checkout@v2 - name: Set up java - uses: actions/setup-java@v2.5.0 + uses: actions/setup-java@v3.0.0 with: java-version: ${{ matrix.java_version }} distribution: temurin - cache: maven - - # Downloading all the dependencies is very log spammy, so we do this in its own step. - - name: Prime maven cache - run: mvn --batch-mode dependency:go-offline - - # POM version is usually a -SNAPSHOT at this point, if this is a release then we use the version derived from the tag - - name: Set POM version - if: needs.workflow_config.outputs.do_release == 'true' - env: - POM_VERSION: ${{ needs.workflow_config.outputs.pom_version }} - run: mvn --batch-mode versions:set "-DnewVersion=${POM_VERSION}" + cache: gradle # Compile / Test / Package are separate steps so the reason for any failure is more obvious in GitHub UI - name: Compile - run: mvn --batch-mode compile + run: gradle -q compileJava --no-daemon - name: Test - run: mvn --batch-mode test + run: gradle -q test --no-daemon - # The repeated "matrix.release_from_this_build" checks are messy, but I have not found a simple way to avoid them - # See https://github.com/actions/runner/issues/662 - - - name: Setup gpg - if: matrix.release_from_this_build && env.ARTIFACT_SIGNING_KEY - id: gpg - env: - ARTIFACT_SIGNING_KEY: ${{ secrets.ARTIFACT_SIGNING_KEY }} - run: | - echo "Importing key ..." - echo "${ARTIFACT_SIGNING_KEY}" | gpg --batch --import --import-options import-show - - echo "Getting key id ..." - key_id="$(echo "${ARTIFACT_SIGNING_KEY}" | gpg --batch --show-keys --with-colons | awk -F: '$1 == "sec" { print $5 }')" - echo "::set-output name=key_id::${key_id}" - - - name: Create artifacts - if: matrix.release_from_this_build - env: - GPG_KEYNAME: ${{ steps.gpg.outputs.key_id }} - GPG_PASSPHRASE: ${{ secrets.ARTIFACT_SIGNING_PASSPHRASE }} - run: | - [[ "${SIGN_ARTIFACTS}" == "true" ]] || cp pom.xml target/plantuml.pom - - mvn --batch-mode \ - "-DfinalName=plantuml" \ - "-Dgpg.keyname=${GPG_KEYNAME}" \ - "-Dgpg.passphrase=${GPG_PASSPHRASE}" \ - "-Dmaven.test.skip=true" \ - verify - - - name: Upload artifacts - if: matrix.release_from_this_build - uses: actions/upload-artifact@v2 - with: - # Using github.run_number here to reduce confusion when downloading & comparing artifacts from several builds - name: ${{ github.run_number }}-artifacts - path: | - target/*.asc - target/*.jar - target/*.pom - - release: - needs: [ workflow_config, build ] - if: needs.workflow_config.outputs.do_release == 'true' || needs.workflow_config.outputs.do_snapshot_release == 'true' + upload: + needs: [ workflow_config, test ] runs-on: ubuntu-latest steps: - name: Checkout the repository uses: actions/checkout@v2 - - name: Download artifacts - uses: actions/download-artifact@v2 + - name: Set up java + uses: actions/setup-java@v3.0.0 with: + java-version: 17 + distribution: temurin + cache: gradle + + - name: Set version from tag + if: env.POM_VERSION + env: + POM_VERSION: ${{ needs.workflow_config.outputs.pom_version }} + run: sed -i "s/version = .*/version = $POM_VERSION/" gradle.properties + + - name: Build artifacts + run: | + gradle -q clean build \ + pdfJar \ + generateMetadataFileForMavenPublication generatePomFileForMavenPublication \ + -x test + + - name: Sign artifacts + if: env.ORG_GRADLE_PROJECT_signingKey + env: + ORG_GRADLE_PROJECT_signingKey: ${{ secrets.ARTIFACT_SIGNING_KEY }} + ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.ARTIFACT_SIGNING_PASSPHRASE }} + run: | + gradle -q signMavenPublication signPdfJar + + - name: Upload artifacts + uses: actions/upload-artifact@v2 + with: + # Using github.run_number here to reduce confusion when downloading & comparing artifacts from several builds name: ${{ github.run_number }}-artifacts - path: target + path: | + build/libs/* + build/publications/maven/* - name: Create snapshot release if: needs.workflow_config.outputs.do_snapshot_release == 'true' env: GITHUB_TOKEN: ${{ github.token }} - run: .github/scripts/release_snapshot.sh + run: .github/scripts/release-snapshot.sh - name: Create release in GitHub if: needs.workflow_config.outputs.do_release == 'true' env: GITHUB_TOKEN: ${{ github.token }} - POM_VERSION: ${{ needs.workflow_config.outputs.pom_version }} TAG: ${{ github.event.ref }} run: .github/scripts/release.sh diff --git a/build.gradle.kts b/build.gradle.kts index 05691bc39..e550afbe6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -88,6 +88,42 @@ tasks.withType().configureEach { publishing { publications.create("maven") { from(components["java"]) + pom { + url.set("https://plantuml.com/") + licenses { + license { + name.set("The GNU General Public License") + url.set("http://www.gnu.org/licenses/gpl.txt") + } + } + developers { + developer { + id.set("arnaud.roques") + name.set("Arnaud Roques") + email.set("plantuml@gmail.com") + } + } + scm { + connection.set("scm:git:git://github.com:plantuml/plantuml.git") + developerConnection.set("scm:git:ssh://git@github.com:plantuml/plantuml.git") + url.set("https://github.com/plantuml/plantuml") + } + } + suppressAllPomMetadataWarnings() + } + repositories { + maven { + name = "fstest" + url = uri(layout.buildDirectory.dir("repo")) + } + maven { + name = "OSSRH" + url = uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") + credentials { + username = System.getenv("MAVEN_USERNAME") + password = System.getenv("MAVEN_PASSWORD") + } + } } } diff --git a/pom.xml b/pom.xml deleted file mode 100644 index f39cf1fe6..000000000 --- a/pom.xml +++ /dev/null @@ -1,329 +0,0 @@ - - - - 4.0.0 - net.sourceforge.plantuml - plantuml - 1.2022.1-SNAPSHOT - jar - PlantUML - - PlantUML is a component that allows to quickly write : - * sequence diagram, - * use case diagram, - * class diagram, - * activity diagram, - * component diagram, - * state diagram - * object diagram - - https://plantuml.com - - - org.sonatype.oss - oss-parent - 7 - - - ${project.artifactId}-${project.version} - net.sourceforge.plantuml.Run - - - - - org.junit - junit-bom - 5.8.2 - pom - import - - - - - - org.apache.ant - ant - 1.10.12 - provided - - - org.assertj - assertj-core - 3.22.0 - test - - - org.junit.jupiter - junit-jupiter - test - - - org.scilab.forge - jlatexmath - 1.0.7 - test - - - - - The GNU General Public License - http://www.gnu.org/licenses/gpl.txt - repo - - - - scm:svn:svn://svn.code.sf.net/p/plantuml/code/trunk - scm:svn:https://svn.code.sf.net/p/plantuml/code/trunk - svn://svn.code.sf.net/p/plantuml/code/trunk - - - Sourceforge - http://sourceforge.net/tracker/?group_id=259736 - - - - arnaud.roques - Arnaud Roques - plantuml@gmail.com - - - - ${finalName} - ${project.basedir}/src - ${project.basedir}/test - - - ${project.basedir}/src - - net/sourceforge/plantuml/version/*.png - net/sourceforge/plantuml/openiconic/data/*.txt - net/sourceforge/plantuml/openiconic/data/*.svg - net/sourceforge/plantuml/emoji/data/*.txt - net/sourceforge/plantuml/emoji/data/*.svg - net/sourceforge/plantuml/fun/*.png - sprites/archimate/*.png - net/sourceforge/plantuml/dedication/*.png - net/sourceforge/plantuml/math/*.js - net/sourceforge/plantuml/windowsdot/*.dat - net/sourceforge/plantuml/utils/*.txt - - - - ${project.basedir} - - stdlib/**/*.repx - skin/**/*.skin - themes/**/*.puml - svg/**/*.css - svg/**/*.js - - - - - - maven-compiler-plugin - 3.9.0 - - true - - - - maven-dependency-plugin - 3.2.0 - - - maven-source-plugin - 3.2.1 - - - attach-sources - - jar - - - - - - maven-javadoc-plugin - 3.3.1 - - - attach-javadocs - - jar - - - - -Xmaxwarns - 1 - - none - - - - - - maven-jar-plugin - 3.2.2 - - - manifest.txt - - true - - - - - - maven-surefire-plugin - 3.0.0-M5 - - - UNSECURE - - - true - - - - - maven-release-plugin - 2.5.3 - - forked-path - - - - org.codehaus.mojo - versions-maven-plugin - 2.9.0 - - - - - - - javac-release-flag - - [9,) - - - 8 - - - - javac-source-flag - - true - - - - 1.8 - 1.8 - - - - pdf - - false - - - - - org.apache.maven.plugins - maven-assembly-plugin - 3.3.0 - - - jar-with-dependencies - - - - ${main.class} - - - - - - make-assembly - package - - single - - - - - - - - - org.apache.xmlgraphics - fop - 2.7 - - - org.apache.xmlgraphics - batik-all - 1.14 - - - - - - sign-artifacts - - - env.SIGN_ARTIFACTS - true - - - - - - maven-gpg-plugin - 3.0.1 - - - sign-artifacts - verify - - sign - - - - - - - - -