From 4e074ab42773bb101a7dd93e317ac51474f9d253 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Thu, 4 Jun 2026 16:24:03 +0200 Subject: [PATCH 01/12] ALFREDAPI-585: Add test for create with id --- CHANGELOG.md | 6 ++ .../apix/tests/metadata/NodeServiceTest.java | 79 +++++++++++++------ .../java/eu/xenit/apix/node/INodeService.java | 4 + 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 32d287b8..4e19ddc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Alfred API - Changelog +## 5.1.0 (unreleased) + +### Added +* [ALFREDAPI-585](https://xenitsupport.jira.com/browse/ALFREDAPI-585): Add possibility to pass id when creating a document (Java API) + + ## 5.0.4 (2024-11-22) ### Fixed diff --git a/apix-integrationtests/alfresco/src/main/java/eu/xenit/apix/tests/metadata/NodeServiceTest.java b/apix-integrationtests/alfresco/src/main/java/eu/xenit/apix/tests/metadata/NodeServiceTest.java index add86c16..8c4c3897 100644 --- a/apix-integrationtests/alfresco/src/main/java/eu/xenit/apix/tests/metadata/NodeServiceTest.java +++ b/apix-integrationtests/alfresco/src/main/java/eu/xenit/apix/tests/metadata/NodeServiceTest.java @@ -1,12 +1,5 @@ package eu.xenit.apix.tests.metadata; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - import eu.xenit.apix.alfresco.ApixToAlfrescoConversion; import eu.xenit.apix.categories.ICategoryService; import eu.xenit.apix.data.ContentInputStream; @@ -16,19 +9,6 @@ import eu.xenit.apix.node.NodeAssociation; import eu.xenit.apix.node.NodeMetadata; import eu.xenit.apix.tests.BaseTest; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.Serializable; -import java.io.StringWriter; -import java.io.UnsupportedEncodingException; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; import org.alfresco.model.ContentModel; import org.alfresco.repo.domain.node.ContentDataWithId; import org.alfresco.repo.model.Repository; @@ -58,6 +38,27 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.Serializable; +import java.io.StringWriter; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + public class NodeServiceTest extends BaseTest { @@ -658,8 +659,7 @@ public void testCreateNodeWithMetadata() throws UnsupportedEncodingException { assertNotNull("the cm:name property could not be found", testProperties.get(ContentModel.PROP_NAME)); assertNotNull("", testProperties.get(c.alfresco(documentStatusQname))); assertTrue(alfrescoNodeService.hasAspect(c.alfresco(createdNodeRef), ContentModel.ASPECT_TEMPORARY)); - } - finally { + } finally { this.cleanUp(); } } @@ -793,7 +793,7 @@ public void TestFileUpload() throws IOException { } @Test - public void testTextFileUploadWithMimeGuess() throws IOException{ + public void testTextFileUploadWithMimeGuess() throws IOException { cleanUp(); NodeRef companyHomeNodeRef = repository.getCompanyHome(); FileInfo mainTestFolder = createMainTestFolder(companyHomeNodeRef); @@ -803,7 +803,7 @@ public void testTextFileUploadWithMimeGuess() throws IOException{ eu.xenit.apix.data.ContentData contentData = service.createContentWithMimetypeGuess(inputStream, testTextFile.getName(), "UTF-8"); - assertEquals(contentData.getEncoding(),"UTF-8"); + assertEquals(contentData.getEncoding(), "UTF-8"); assertEquals(TEXT_MIMETYPE, contentData.getMimetype()); } finally { removeTestNode(mainTestFolder.getNodeRef()); @@ -847,4 +847,35 @@ public void TestGetRootNode() { service.getRootNode(apixStoreRef).toString(), alfrescoNodeService.getRootNode(alfStoreRef).toString()); } + + // https://xenitsupport.jira.com/browse/ALFREDAPI-585: Needed for Ethias ContentGrid migration rollback + @Test + public void testCreateNodeWithId() { + NodeRef companyHomeRef = repository.getCompanyHome(); + FileInfo mainTestFolder = createMainTestFolder(companyHomeRef); + FileInfo testFolder = createTestFolder(mainTestFolder.getNodeRef(), "testfolder"); + try { + // Constraint: UUID passed must be <= 50 characters (otherwise IllegalArgumentException) + String desiredId = "Blond hair. Don't care"; + String desiredName = "testos nodos"; + + Map properties = new HashMap<>(); + properties.put(c.apix(ContentModel.PROP_NODE_UUID), new String[]{desiredId}); + properties.put(c.apix(ContentModel.PROP_NAME), new String[]{desiredName}); + + eu.xenit.apix.data.NodeRef created = service.createNode( + c.apix(testFolder.getNodeRef()), + properties, + c.apix(ContentModel.TYPE_CONTENT), + null // contentData + ); + + logger.warn("Created node with NodeRef='{}'", created); + + assertEquals(desiredId, created.getGuid()); + assertEquals(desiredName, alfrescoNodeService.getProperty(c.alfresco(created), ContentModel.PROP_NAME)); + } finally { + removeTestNode(mainTestFolder.getNodeRef()); + } + } } diff --git a/apix-interface/src/main/java/eu/xenit/apix/node/INodeService.java b/apix-interface/src/main/java/eu/xenit/apix/node/INodeService.java index 538cc8c6..b780c2ac 100644 --- a/apix-interface/src/main/java/eu/xenit/apix/node/INodeService.java +++ b/apix-interface/src/main/java/eu/xenit/apix/node/INodeService.java @@ -135,6 +135,8 @@ public interface INodeService { /** * Creation of a node giving the list of properties as well as the type. To be used when using a custom type has * required properties. + * Note: Passing {http://www.alfresco.org/model/system/1.0}node-uuid as property allows to override the UUID + * to workspace://SpacesStore/{value}. * * @param parent The parent node of the new node. * @param properties list of properties to add to node. @@ -147,6 +149,8 @@ public interface INodeService { /** * Creation of a node giving the list of properties as well as the type. To be used when using a custom type has * required properties. + * Note: Passing {http://www.alfresco.org/model/system/1.0}node-uuid as property allows to override the UUID + * to workspace://SpacesStore/{value}. * * @param parent The parent node of the new node. * @param properties list of properties to add to node. From f24b1981e81bf9de21ec5d8409530531255266c1 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 02/12] ALFREDAPI-585: Update CI build (Harbor, GHA, ...) --- .github/workflows/ci.yml | 56 ++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 31 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2babf474..5e329882 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -5,10 +5,10 @@ on: env: ALFRESCO_NEXUS_USERNAME: ${{ secrets.ALFRESCO_NEXUS_USERNAME }} ALFRESCO_NEXUS_PASSWORD: ${{ secrets.ALFRESCO_NEXUS_PASSWORD }} - ORG_GRADLE_PROJECT_signingKey: ${{ secrets.MAVEN_CENTRAL_GPG_KEY }} - ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.MAVEN_CENTRAL_GPG_PASSWORD }} - ORG_GRADLE_PROJECT_sonatype_username: ${{ secrets.SONATYPE_S01_USERNAME }} - ORG_GRADLE_PROJECT_sonatype_password: ${{ secrets.SONATYPE_S01_PASSWORD }} + SIGNING_PRIVATE_KEY: ${{ secrets.MAVEN_CENTRAL_GPG_KEY }} + SIGNING_PASSWORD: ${{ secrets.MAVEN_CENTRAL_GPG_PASSWORD }} + ORG_GRADLE_PROJECT_mavenCentralPublishUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }} + ORG_GRADLE_PROJECT_mavenCentralPublishPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }} BRANCH_NAME: ${{ github.ref_name }} jobs: apix-interface: @@ -21,25 +21,21 @@ jobs: with: java-version: 11 distribution: temurin - - name: Login to Docker - uses: docker/login-action@v2 + - name: Login to Xenit Harbor + uses: docker/login-action@v3 with: - registry: private.docker.xenit.eu - username: ${{ secrets.CLOUDSMITH_USER }} - password: ${{ secrets.CLOUDSMITH_APIKEY }} + registry: docker.xenit.eu + username: ${{ secrets.HARBOR_USER }} + password: ${{ secrets.HARBOR_PASSWORD }} + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 - name: Build interface # Execute before integration testing to catch errors early - uses: gradle/gradle-build-action@v2.3.0 - with: - arguments: :apix-interface:build :apix-interface:javadoc + run: ./gradlew :apix-interface:build :apix-interface:javadoc - name: Unit test REST API - uses: gradle/gradle-build-action@v2.4.2 - with: - arguments: --info :apix-rest-v1:test + run: ./gradlew --info :apix-rest-v1:test - name: Publish if: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/release') }}" - uses: gradle/gradle-build-action@v2.4.2 - with: - arguments: --info -PsigningKeyId=DF8285F0 :apix-interface:publish + run: ./gradlew --info :apix-interface:publish apix-impl: strategy: @@ -55,20 +51,20 @@ jobs: with: java-version: 11 distribution: temurin - - name: Login to Docker - uses: docker/login-action@v2 + - name: Login to Xenit Harbor + uses: docker/login-action@v3 with: - registry: private.docker.xenit.eu - username: ${{ secrets.CLOUDSMITH_USER }} - password: ${{ secrets.CLOUDSMITH_APIKEY }} + registry: docker.xenit.eu + username: ${{ secrets.HARBOR_USER }} + password: ${{ secrets.HARBOR_PASSWORD }} - name: Install Docker Compose run: | sudo apt-get update sudo apt-get install -y docker-compose + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 - name: Build and test - uses: gradle/gradle-build-action@v2.4.2 - with: - arguments: >- + run: ./gradlew >- --info :apix-impl:apix-impl-${{ matrix.alfresco_version }}:test :apix-integrationtests:alfresco:${{ matrix.alfresco_version }}:integrationTest @@ -82,8 +78,6 @@ jobs: detailed_summary: true - name: Publish if: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/release') }}" - uses: gradle/gradle-build-action@v2.4.2 - with: - arguments: >- - --info -PsigningKeyId=DF8285F0 - :alfresco:${{ matrix.alfresco_version }}:publish \ No newline at end of file + run: ./gradlew >- + --info + :alfresco:${{ matrix.alfresco_version }}:publish From d4912b955fae0ec8ce6a77a802d478f2774f65ee Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 03/12] ALFREDAPI-585: Fix interface publish step conditional being ignored --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5e329882..cbb2bc92 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: - name: Unit test REST API run: ./gradlew --info :apix-rest-v1:test - name: Publish - if: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/release') }}" + if: ${{ startsWith(github.ref, 'refs/heads/master') || startsWith(github.ref, 'refs/heads/release') }} run: ./gradlew --info :apix-interface:publish apix-impl: From 1c4b673699b8e1c3ad7a91dc686fd9cc5c09bda1 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 04/12] ALFREDAPI-585: Fix gradle build --- apix-docker/build.gradle | 1 + build.gradle | 24 ++++++++++++++++++++++++ settings.gradle | 4 ++++ 3 files changed, 29 insertions(+) diff --git a/apix-docker/build.gradle b/apix-docker/build.gradle index 307611c2..48155b27 100644 --- a/apix-docker/build.gradle +++ b/apix-docker/build.gradle @@ -23,6 +23,7 @@ subprojects { dockerCompose { useComposeFiles = ['docker-compose.yml'] + tcpPortsToIgnoreWhenWaiting = [ 8000 ] // Don't get stuck when a debugger is attached // Don't use the dev compose file during CI builds if (!ci.isCi()) { // Allow the dev compose file to be deleted diff --git a/build.gradle b/build.gradle index f1b4ae2f..a8ad2cae 100644 --- a/build.gradle +++ b/build.gradle @@ -25,6 +25,30 @@ ext { http_version = '4.3.4' // Used by integration tests } +// See https://jreleaser.org/guide/latest/reference/deploy/maven/maven-central.html for syntax +jreleaser { + deploy { + maven { + mavenCentral { + release { + // Add an override for each artifact we want to publish, because we want to + // disable requirements checking for each of them. + ['interface', '231', '232', '233', '234', '251'].each { suffix -> + artifactOverride { + // Match artifact by artifactId + artifactId = "alfred-api-${suffix}" + verifyPom = false + jar = false + sourceJar = false + javadocJar = false + } + } + } + } + } + } +} + subprojects { apply plugin: 'java' diff --git a/settings.gradle b/settings.gradle index 4a170df9..13f2953f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,7 @@ +plugins { + id 'eu.xenit.enterprise-conventions.oss' version '0.6.2' +} + rootProject.name = 'apix' include ':apix-interface' From 3238b0cb3ce931dd75b015199d0553a36e2a37cb Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 05/12] ALFREDAPI-585: Replace Cloudsmith by Harbor --- apix-docker/70/build.gradle | 2 +- apix-docker/70/docker-compose.yml | 2 +- apix-docker/71/build.gradle | 2 +- apix-docker/71/docker-compose.yml | 2 +- apix-docker/72/build.gradle | 2 +- apix-docker/72/docker-compose.yml | 2 +- apix-docker/73/build.gradle | 2 +- apix-docker/73/docker-compose.yml | 2 +- apix-docker/74/build.gradle | 2 +- apix-docker/74/docker-compose.yml | 2 +- docs/build-website.sh | 6 +++--- 11 files changed, 13 insertions(+), 13 deletions(-) diff --git a/apix-docker/70/build.gradle b/apix-docker/70/build.gradle index 2a95edd4..47d977ed 100644 --- a/apix-docker/70/build.gradle +++ b/apix-docker/70/build.gradle @@ -4,5 +4,5 @@ dependencies { } dockerAlfresco { - baseImage = 'private.docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.0.1.9' + baseImage = 'docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.0.1.9' } diff --git a/apix-docker/70/docker-compose.yml b/apix-docker/70/docker-compose.yml index af551880..6aef4504 100644 --- a/apix-docker/70/docker-compose.yml +++ b/apix-docker/70/docker-compose.yml @@ -14,7 +14,7 @@ services: - GLOBAL_localTransform.core-aio.url=http://transform-core-aio:8090/ solr: - image: private.docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 + image: docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 volumes: - solr:/opt/alfresco/alf_data restart: unless-stopped diff --git a/apix-docker/71/build.gradle b/apix-docker/71/build.gradle index 706ff2a4..54b7b61e 100644 --- a/apix-docker/71/build.gradle +++ b/apix-docker/71/build.gradle @@ -4,5 +4,5 @@ dependencies { } dockerAlfresco { - baseImage = 'private.docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.1.0.6' + baseImage = 'docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.1.0.6' } diff --git a/apix-docker/71/docker-compose.yml b/apix-docker/71/docker-compose.yml index af551880..6aef4504 100644 --- a/apix-docker/71/docker-compose.yml +++ b/apix-docker/71/docker-compose.yml @@ -14,7 +14,7 @@ services: - GLOBAL_localTransform.core-aio.url=http://transform-core-aio:8090/ solr: - image: private.docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 + image: docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 volumes: - solr:/opt/alfresco/alf_data restart: unless-stopped diff --git a/apix-docker/72/build.gradle b/apix-docker/72/build.gradle index aa29f799..e22e5f3a 100644 --- a/apix-docker/72/build.gradle +++ b/apix-docker/72/build.gradle @@ -4,5 +4,5 @@ dependencies { } dockerAlfresco { - baseImage = 'private.docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.2.1.13' + baseImage = 'docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.2.1.13' } diff --git a/apix-docker/72/docker-compose.yml b/apix-docker/72/docker-compose.yml index af551880..6aef4504 100644 --- a/apix-docker/72/docker-compose.yml +++ b/apix-docker/72/docker-compose.yml @@ -14,7 +14,7 @@ services: - GLOBAL_localTransform.core-aio.url=http://transform-core-aio:8090/ solr: - image: private.docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 + image: docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 volumes: - solr:/opt/alfresco/alf_data restart: unless-stopped diff --git a/apix-docker/73/build.gradle b/apix-docker/73/build.gradle index 6cd5164d..1555b67f 100644 --- a/apix-docker/73/build.gradle +++ b/apix-docker/73/build.gradle @@ -4,5 +4,5 @@ dependencies { } dockerAlfresco { - baseImage = 'private.docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.3.1.2' + baseImage = 'docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.3.1.2' } diff --git a/apix-docker/73/docker-compose.yml b/apix-docker/73/docker-compose.yml index 1260a213..a325417b 100644 --- a/apix-docker/73/docker-compose.yml +++ b/apix-docker/73/docker-compose.yml @@ -15,7 +15,7 @@ services: - GLOBAL_localTransform.core-aio.url=http://transform-core-aio:8090/ solr: - image: private.docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 + image: docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.3 volumes: - solr:/opt/alfresco/alf_data restart: unless-stopped diff --git a/apix-docker/74/build.gradle b/apix-docker/74/build.gradle index c8b8ddcb..8556ad9d 100644 --- a/apix-docker/74/build.gradle +++ b/apix-docker/74/build.gradle @@ -4,5 +4,5 @@ dependencies { } dockerAlfresco { - baseImage = 'private.docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.4.1.3' + baseImage = 'docker.xenit.eu/alfresco-enterprise/alfresco-repository-enterprise:7.4.1.3' } diff --git a/apix-docker/74/docker-compose.yml b/apix-docker/74/docker-compose.yml index 8e88c690..c34fec76 100644 --- a/apix-docker/74/docker-compose.yml +++ b/apix-docker/74/docker-compose.yml @@ -15,7 +15,7 @@ services: - GLOBAL_localTransform.core-aio.url=http://transform-core-aio:8090/ solr: - image: private.docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.8.2 + image: docker.xenit.eu/alfresco-enterprise/alfresco-solr6:2.0.8.2 volumes: - solr:/opt/alfresco/alf_data restart: unless-stopped diff --git a/docs/build-website.sh b/docs/build-website.sh index f08cfb5e..a315322b 100755 --- a/docs/build-website.sh +++ b/docs/build-website.sh @@ -6,9 +6,9 @@ cd "$scriptPath" MARKDOWNTOPDF_VERSION=v1.1.4 MARKDOWNTOWEBSITE_VERSION=1.0.5 -MARKDOWNTOPDF_IMAGE="private.docker.xenit.eu/xenit-markdowntopdf:$MARKDOWNTOPDF_VERSION" -MARKDOWN_SPLITTER_IMAGE="private.docker.xenit.eu/customer/xenit/xenit-manuals-markdown-splitter:$MARKDOWNTOWEBSITE_VERSION" -MANUALS_HUGO_GENERATOR_IMAGE="private.docker.xenit.eu/customer/xenit/xenit-manuals-hugo-generator:$MARKDOWNTOWEBSITE_VERSION" +MARKDOWNTOPDF_IMAGE="docker.xenit.eu/internal/xenit-markdowntopdf:$MARKDOWNTOPDF_VERSION" +MARKDOWN_SPLITTER_IMAGE="docker.xenit.eu/internal/xenit-manuals-markdown-splitter:$MARKDOWNTOWEBSITE_VERSION" +MANUALS_HUGO_GENERATOR_IMAGE="docker.xenit.eu/internal/xenit-manuals-hugo-generator:$MARKDOWNTOWEBSITE_VERSION" WEIGHT=0 From 96dc5932a0c5a54b378be2035d47db0b0b2155e2 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 06/12] ALFREDAPI-585: Update GHA runner to Java 11->21 --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cbb2bc92..15570873 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 21 distribution: temurin - name: Login to Xenit Harbor uses: docker/login-action@v3 @@ -49,7 +49,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 21 distribution: temurin - name: Login to Xenit Harbor uses: docker/login-action@v3 From 7a271105bd09ee04c097ee03520e5164a9e9d75b Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 07/12] ALFREDAPI-585: Update CI for publishing to Maven --- publish.gradle | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/publish.gradle b/publish.gradle index 5c2f9c41..b1baecae 100644 --- a/publish.gradle +++ b/publish.gradle @@ -30,24 +30,9 @@ publishing { } } } - - repositories { - maven { - def releasesRepoUrl = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/" - def snapshotsRepoUrl = "https://s01.oss.sonatype.org/content/repositories/snapshots/" - url = version.endsWith('SNAPSHOT') ? snapshotsRepoUrl : releasesRepoUrl - - credentials { - username = project.findProperty('sonatype_username') - password = project.findProperty('sonatype_password') - } - } - } } -signing { - required { !version.toString().endsWith("SNAPSHOT") } - // This needs to be changed once Gradle is upgraded to https://github.com/xenit-eu/xenit-java-logging/blob/master/publish.gradle#L54 - useInMemoryPgpKeys(findProperty("signingKey"), findProperty("signingPassword")) - sign publishing.publications +// Make check task always include the Maven Central requirements check +tasks.named('check').configure { + dependsOn('checkMavenCentralRequirements') } From 56f33a7fecbc2737bfba6aa8ab1b75e7760aa767 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 08/12] ALFREDAPI-585: Fix CI for generateVersionFile --- apix-impl/build.gradle | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/apix-impl/build.gradle b/apix-impl/build.gradle index 9ef4f103..e3e7f22e 100644 --- a/apix-impl/build.gradle +++ b/apix-impl/build.gradle @@ -49,23 +49,9 @@ allprojects { testImplementation 'org.mockito:mockito-core' } - task generateVersionFile(type: Task) { - def versionFile = "${rootDir}/apix-impl/src/main/java/eu/xenit/apix/Version.java" - outputs.file versionFile - doFirst { - file(versionFile).text = """package eu.xenit.apix; -/* - * WARNING: THIS FILE IS AUTO-GENERATED BY GRADLE DURING BUILD. - * ANY CHANGES TO THIS FILE WILL BE LOST AFTER NEW BUILD. - * SEE Gradle task generateVersionFile - */ -public class Version { - public static final String Number = "${project.versionWithoutQualifier}"; -} -""" - } + tasks.named('compileJava').configure { + dependsOn generateVersionFile } - compileJava.dependsOn generateVersionFile test { // Always run unit tests @@ -75,3 +61,21 @@ public class Version { testLogging { events "PASSED", "FAILED", "SKIPPED" } } } + + +task generateVersionFile(type: Task) { + def versionFile = "${rootDir}/apix-impl/src/main/java/eu/xenit/apix/Version.java" + outputs.file versionFile + doFirst { + file(versionFile).text = """package eu.xenit.apix; +/* + * WARNING: THIS FILE IS AUTO-GENERATED BY GRADLE DURING BUILD. + * ANY CHANGES TO THIS FILE WILL BE LOST AFTER NEW BUILD. + * SEE Gradle task generateVersionFile + */ +public class Version { + public static final String Number = "${project.versionWithoutQualifier}"; +} +""" + } +} \ No newline at end of file From 8569f10bf1c4501c8bff4825e42d370e739aa060 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 09/12] ALFREDAPI-585: Fix CI for jReleaser --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index a8ad2cae..eb0d5466 100644 --- a/build.gradle +++ b/build.gradle @@ -49,7 +49,7 @@ jreleaser { } } -subprojects { +allprojects { apply plugin: 'java' group = 'eu.xenit.alfred.api' From 245450479b1e141660e91e8a66e0799c77d0fb81 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 10/12] ALFREDAPI-585: Fix CI MockMaker errors --- apix-impl/build.gradle | 4 +++- apix-integrationtests/alfresco/build.gradle | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/apix-impl/build.gradle b/apix-impl/build.gradle index e3e7f22e..ad78fe4e 100644 --- a/apix-impl/build.gradle +++ b/apix-impl/build.gradle @@ -46,7 +46,9 @@ allprojects { testImplementation 'org.alfresco:alfresco-repository' testImplementation 'org.alfresco:alfresco-remote-api' testImplementation 'org.alfresco:alfresco-data-model' - testImplementation 'org.mockito:mockito-core' + // Mockito 3.x (from Alfresco 7.0/7.1/7.2 BOM) has a circular static init bug on Java 17+. + // Pin to 4.x which fixes it (same version range ACS 7.3/7.4 already ship). + testImplementation 'org.mockito:mockito-core:4.11.0' } tasks.named('compileJava').configure { diff --git a/apix-integrationtests/alfresco/build.gradle b/apix-integrationtests/alfresco/build.gradle index 6d6f183b..e8f13f7e 100644 --- a/apix-integrationtests/alfresco/build.gradle +++ b/apix-integrationtests/alfresco/build.gradle @@ -69,6 +69,7 @@ allprojects { testImplementation project.sourceSets.integrationTest.output testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.25.1' + } } From 1afcf383a00b76d6be0e882492eb441182185e9d Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 11/12] ALFREDAPI-585: Amend changelog about creation with id test --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e19ddc0..17bc1e7e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ## 5.1.0 (unreleased) ### Added -* [ALFREDAPI-585](https://xenitsupport.jira.com/browse/ALFREDAPI-585): Add possibility to pass id when creating a document (Java API) +* [ALFREDAPI-585](https://xenitsupport.jira.com/browse/ALFREDAPI-585): Test possibility to pass id when creating a document (Java API) ## 5.0.4 (2024-11-22) From 6637949dfec002f93dd0fca35656d62cc5d92536 Mon Sep 17 00:00:00 2001 From: "Wim R. Crols" Date: Mon, 8 Jun 2026 10:31:11 +0200 Subject: [PATCH 12/12] ALFREDAPI-585: Fix JReleaser for old artifacts --- build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle b/build.gradle index eb0d5466..4a25f3d4 100644 --- a/build.gradle +++ b/build.gradle @@ -33,10 +33,10 @@ jreleaser { release { // Add an override for each artifact we want to publish, because we want to // disable requirements checking for each of them. - ['interface', '231', '232', '233', '234', '251'].each { suffix -> + ['interface', 'impl-70', 'impl-71', 'impl-72', 'impl-73', 'impl-74'].each { suffix -> artifactOverride { // Match artifact by artifactId - artifactId = "alfred-api-${suffix}" + artifactId = "apix-${suffix}" verifyPom = false jar = false sourceJar = false