mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

vharseko
19.05.2022 7cfd0304154ed36f395e678c694ca3dffb73f81d
Migrate release from Travis to GitHub (#217)

1 files deleted
1 files added
1 files renamed
11 files modified
505 ■■■■ changed files
.github/workflows/build.yml 43 ●●●●● patch | view | raw | blame | history
.github/workflows/deploy.yml 114 ●●●●● patch | view | raw | blame | history
.github/workflows/release.yml 135 ●●●●● patch | view | raw | blame | history
.travis.yml 102 ●●●●● patch | view | raw | blame | history
opendj-doc-generated-ref/pom.xml 2 ●●● patch | view | raw | blame | history
opendj-doc-maven-plugin/src/main/java/org/forgerock/opendj/maven/doc/GenerateMessageFileMojo.java 2 ●●● patch | view | raw | blame | history
opendj-doc-maven-plugin/src/main/java/org/forgerock/opendj/maven/doc/GenerateRefEntriesMojo.java 5 ●●●●● patch | view | raw | blame | history
opendj-packages/opendj-docker/Dockerfile 11 ●●●● patch | view | raw | blame | history
opendj-packages/opendj-docker/Dockerfile-alpine patch | view | raw | blame | history
opendj-packages/opendj-docker/pom.xml 3 ●●●● patch | view | raw | blame | history
opendj-packages/opendj-msi/opendj-msi-standard/pom.xml 55 ●●●● patch | view | raw | blame | history
opendj-packages/opendj-msi/pom.xml 6 ●●●● patch | view | raw | blame | history
opendj-packages/pom.xml 14 ●●●● patch | view | raw | blame | history
pom.xml 13 ●●●● patch | view | raw | blame | history
.github/workflows/build.yml
@@ -15,14 +15,28 @@
        java: [ '8', '11']
        os: [ 'ubuntu-latest', 'macos-latest', 'windows-latest' ]
    steps:
    - uses: actions/checkout@v2
    - name:  Install wine+rpm for ditribution
      if: runner.os == 'Linux'
      shell: bash
      run:   |
         sudo dpkg --add-architecture i386
         sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9
         sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main'
         sudo apt -qq update
         sudo apt install -y --allow-downgrades libpcre2-8-0=10.34-7
         sudo apt install -y wine32
         wine --version
    - uses: actions/checkout@v3
      with:
        fetch-depth: 0
        submodules: recursive
    - name: Java ${{ matrix.Java }} (${{ matrix.os }})
      uses: actions/setup-java@v2
      with:
        java-version: ${{ matrix.java }}
        distribution: 'adopt'
    - name: Cache Maven packages
      uses: actions/cache@v2
      uses: actions/cache@v3
      with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-m2-repository-${{ hashFiles('**/pom.xml') }}
@@ -30,4 +44,27 @@
    - name: Build with Maven
      env:
        MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
      run: mvn --batch-mode  --update-snapshots package --file pom.xml
      run: mvn --batch-mode --errors --update-snapshots package --file pom.xml
    - name: Docker build
      if: runner.os == 'Linux'
      shell: bash
      run:   |
         git fetch -t; export git_version_last="$(git describe --abbrev=0 --tags)" ; echo "last release: $git_version_last"
         docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t ${GITHUB_REPOSITORY,,}:$git_version_last --build-arg VERSION=$git_version_last
         docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t ${GITHUB_REPOSITORY,,}:$git_version_last-alpine --build-arg VERSION=$git_version_last
    - name: Upload artifacts OpenDJ Server
      uses: actions/upload-artifact@v3
      with:
        name: ${{ matrix.os }}-${{ matrix.java }}
        retention-days: 5
        path:  |
            opendj-server-legacy/target/package/*.zip
            opendj-ldap-toolkit/target/*.zip
            opendj-packages/opendj-deb/opendj-deb-standard/target/*.deb
            opendj-packages/opendj-rpm/opendj-rpm-standard/target/rpm/opendj/RPMS/noarch/*.rpm
            opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi
            opendj-packages/opendj-docker/target/Dockerfile.zip
            opendj-packages/opendj-openshift-template/*.yaml
            opendj-doc-generated-ref/target/*.zip
            opendj-dsml-servlet/target/*.war
            opendj-rest2ldap-servlet/target/*.war
.github/workflows/deploy.yml
@@ -1,4 +1,4 @@
name: Deploy Maven
name: Package/Deploy Maven
on:
  workflow_run:
@@ -8,21 +8,28 @@
jobs:
  deploy:
    name: Maven deploy
    if: ${{ github.event.workflow_run.conclusion == 'success' && github.event.workflow_run.event=='push' }}
    if: ${{ github.event.workflow_run.conclusion == 'success' }}
    runs-on: 'ubuntu-latest'
    steps:
      - name: Print github context
        env:
          GITHUB_CONTEXT: ${{ toJSON(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Install gpg secret key
        env:
           GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
        if: ${{ env.GPG_PRIVATE_KEY!=''}}
      - name: Install wine+rpm for ditribution
        if: runner.os == 'Linux'
        shell: bash
        run: |
           cat <(echo -e "${{ secrets.GPG_PRIVATE_KEY }}") | gpg --batch --import
           gpg --list-secret-keys --keyid-format LONG
      - uses: actions/checkout@v2
           sudo dpkg --add-architecture i386
           sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9
           sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main'
           sudo apt -qq update
           sudo apt install -y --allow-downgrades libpcre2-8-0=10.34-7
           sudo apt install -y wine32
           wine --version
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          submodules: recursive
      - name: Set up Java for publishing to Maven Central Repository OSS
        uses: actions/setup-java@v2
        with:
@@ -37,10 +44,95 @@
         path: ~/.m2/repository
         key: ${{ runner.os }}-m2-repository-${{ hashFiles('**/pom.xml') }}
         restore-keys: ${{ runner.os }}-m2-repository
      - name: Install gpg secret key
        env:
           GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
        if: ${{ env.GPG_PRIVATE_KEY!=''}}
        run: |
           cat <(echo -e "${{ secrets.GPG_PRIVATE_KEY }}") | gpg --batch --import
           gpg --list-secret-keys --keyid-format LONG
      - name: Build package local
        env:
          MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
        if: ${{ !(github.event.workflow_run.event=='push' && env.MAVEN_USERNAME!='' && env.MAVEN_PASSWORD!='')}}
        run: mvn --batch-mode --errors --update-snapshots -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} package --file pom.xml
      - name: Publish to the Maven Central Repository
        env:
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
        if: ${{ env.MAVEN_USERNAME!='' && env.MAVEN_PASSWORD!=''}}
        run: mvn --batch-mode --update-snapshots -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} deploy --file pom.xml
        if: ${{ github.event.workflow_run.event=='push' && env.MAVEN_USERNAME!='' && env.MAVEN_PASSWORD!=''}}
        run: mvn --batch-mode --errors --update-snapshots -Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }} deploy --file pom.xml
      - name: Upload artifacts OpenDJ Server
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Server
         path: opendj-server-legacy/target/package/*.zip
      - name: Upload artifacts OpenDJ SDK Toolkit
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ SDK Toolkit
         path: opendj-ldap-toolkit/target/*.zip
      - name: Upload artifacts OpenDJ Debian Package
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Debian Package
         path: opendj-packages/opendj-deb/opendj-deb-standard/target/*.deb
      - name: Upload artifacts OpenDJ RPM Package
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ RPM Package
         path: opendj-packages/opendj-rpm/opendj-rpm-standard/target/rpm/opendj/RPMS/noarch/*.rpm
      - name: Upload artifacts OpenDJ MSI Package
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ MSI Package
         path: opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi
      - name: Upload artifacts OpenDJ Docker Packages
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Docker Packages
         path: opendj-packages/opendj-docker/target/Dockerfile.zip
      - name: Upload artifacts OpenDJ Openshift template
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Openshift template
         path: opendj-packages/opendj-openshift-template/*.yaml
      - name: Upload artifacts OpenDJ Doc Generated Reference
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Doc Generated References
         path: opendj-doc-generated-ref/target/*.zip
      - name: Upload artifacts OpenDJ DSML Gateway
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ DSML Gateway
         path: opendj-dsml-servlet/target/*.war
      - name: Upload artifacts OpenDJ Commons REST LDAP Gateway
        uses: actions/upload-artifact@v3
        with:
         name: OpenDJ Commons REST LDAP Gateway
         path: opendj-rest2ldap-servlet/target/*.war
      - name: Configure Git User
        run: |
          git config --global user.name "Open Identity Platform Community"
          git config --global user.email "open-identity-platform-opendj@googlegroups.com"
          cd ..
      - uses: actions/checkout@v3
        continue-on-error: true
        with:
          repository: ${{ github.repository }}.wiki
          path: ${{ github.event.repository.name }}.wiki
      - name: Publish docs in wiki
        continue-on-error: true
        shell: bash
        env:
          GITHUB_ACTOR: ${{ github.actor }}
          GITHUB_TOKEN: ${{ github.token }}
        run:   |
           cd ${{ github.event.repository.name }}.wiki
           rm -rf docbkx
           mv ../opendj-doc-generated-ref/target/docbkx ../${{ github.event.repository.name }}.wiki
           git add -A
           git commit -a -m "upload docs after deploy ${{ github.sha }}"
           git push --quiet --force
.github/workflows/release.yml
New file
@@ -0,0 +1,135 @@
name: Release Maven
on:
  workflow_dispatch:
    inputs:
      releaseVersion:
        description: "Default version to use when preparing a release."
        required: true
        default: "X.Y.Z"
      developmentVersion:
        description: "Default version to use for new local working copy."
        required: true
        default: "X.Y.Z-SNAPSHOT"
jobs:
  release:
    name: Maven release
    runs-on: 'ubuntu-latest'
    steps:
      - name: Print github context
        env:
          GITHUB_CONTEXT: ${{ toJSON(github) }}
        run: echo "$GITHUB_CONTEXT"
      - name: Install wine+rpm for ditribution
        shell: bash
        run:   |
           sudo dpkg --add-architecture i386
           sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 86B72ED9
           sudo add-apt-repository 'deb [arch=amd64] https://mirror.mxe.cc/repos/apt focal main'
           sudo apt -qq update
           sudo apt install -y --allow-downgrades libpcre2-8-0=10.34-7
           sudo apt install -y wine32
           wine --version
      - uses: actions/checkout@v3
        with:
          fetch-depth: 0
          submodules: recursive
      - name: Set up Java for publishing to Maven Central Repository OSS
        uses: actions/setup-java@v2
        with:
          java-version: '8'
          distribution: 'adopt'
          server-id: ossrh
          server-username: MAVEN_USERNAME
          server-password: MAVEN_PASSWORD
      - name: Cache Maven packages
        uses: actions/cache@v2
        with:
         path: ~/.m2/repository
         key: ${{ runner.os }}-m2-repository-${{ hashFiles('**/pom.xml') }}
         restore-keys: ${{ runner.os }}-m2-repository
      - name: Install gpg secret key
        env:
           GPG_PRIVATE_KEY: ${{ secrets.GPG_PRIVATE_KEY }}
        if: ${{ env.GPG_PRIVATE_KEY!=''}}
        run: |
           cat <(echo -e "${{ secrets.GPG_PRIVATE_KEY }}") | gpg --batch --import
           gpg --list-secret-keys --keyid-format LONG
      - name: Configure Git User
        run: |
          git config --global user.name "Open Identity Platform Community"
          git config --global user.email "open-identity-platform-opendj@googlegroups.com"
      - name: Release and publish to the Maven Central Repository
        env:
          GITHUB_ACTOR: ${{ github.actor }}
          GITHUB_TOKEN: ${{ github.token }}
          MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }}
          MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }}
          MAVEN_OPTS: -Dhttps.protocols=TLSv1.2 -Dmaven.wagon.httpconnectionManager.ttlSeconds=120 -Dmaven.wagon.http.retryHandler.requestSentEnabled=true -Dmaven.wagon.http.retryHandler.count=10
        if: ${{ env.MAVEN_USERNAME!='' && env.MAVEN_PASSWORD!='' }}
        run: mvn --batch-mode -Darguments="-Dgpg.passphrase=${{ secrets.GPG_PASSPHRASE }}" -DtagNameFormat="${{ github.event.inputs.releaseVersion }}" -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -DdevelopmentVersion=${{ github.event.inputs.developmentVersion }} release:prepare release:perform --file pom.xml
      - name: Release on GitHub
        uses: softprops/action-gh-release@v1
        with:
          name: ${{ github.event.inputs.releaseVersion }}
          tag_name: ${{ github.event.inputs.releaseVersion }}
          draft: false
          prerelease: false
          fail_on_unmatched_files: false
          generate_release_notes: true
          files: |
            opendj-server-legacy/target/package/*.zip
            opendj-ldap-toolkit/target/*.zip
            opendj-packages/opendj-deb/opendj-deb-standard/target/*.deb
            opendj-packages/opendj-rpm/opendj-rpm-standard/target/rpm/opendj/RPMS/noarch/*.rpm
            opendj-packages/opendj-msi/opendj-msi-standard/target/*.msi
            opendj-packages/opendj-docker/target/Dockerfile.zip
            opendj-packages/opendj-openshift-template/*.yaml
            opendj-doc-generated-ref/target/*.zip
            opendj-dsml-servlet/target/*.war
            opendj-rest2ldap-servlet/target/*.war
      - name: Docker publish hub.docker.com
        if: ${{ secrets.DOCKER_PASSWORD!='' && secrets.DOCKER_USERNAME!=''}}
        continue-on-error: true
        shell: bash
        run:   |
          echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin
          docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t ${GITHUB_REPOSITORY,,} -t ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }} --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
          docker push ${GITHUB_REPOSITORY,,}
          docker push ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}
          docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t ${GITHUB_REPOSITORY,,}:alpine -t ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}-alpine --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
          docker push ${GITHUB_REPOSITORY,,}:alpine
          docker push ${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}-alpine
      - name: Docker publish docker.pkg.github.com
        continue-on-error: true
        shell: bash
        env:
          GITHUB_REPOSITORY_NAME: ${{ github.event.repository.name }}
        run:   |
          echo "${{ secrets.GITHUB_TOKEN }}" | docker login -u "Open Identity Platform Community" docker.pkg.github.com --password-stdin
          docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,} -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}:${{ github.event.inputs.releaseVersion }}/${GITHUB_REPOSITORY_NAME,,} --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
          docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}
          docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}
          docker build opendj-packages/opendj-docker -f opendj-packages/opendj-docker/Dockerfile-alpine -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:alpine -t docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}-alpine --build-arg VERSION=${{ github.event.inputs.releaseVersion }}
          docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:alpine
          docker push docker.pkg.github.com/${GITHUB_REPOSITORY,,}/${GITHUB_REPOSITORY_NAME,,}:${{ github.event.inputs.releaseVersion }}-alpine
      - uses: actions/checkout@v3
        continue-on-error: true
        with:
          repository: ${{ github.repository }}.wiki
          path: ${{ github.event.repository.name }}.wiki
      - name: Publish docs in wiki
        continue-on-error: true
        shell: bash
        env:
          GITHUB_ACTOR: ${{ github.actor }}
          GITHUB_TOKEN: ${{ github.token }}
        run:   |
           cd ${{ github.event.repository.name }}.wiki
           rm -rf docbkx
           mv ../opendj-doc-generated-ref/target/docbkx ../${{ github.event.repository.name }}.wiki
           git add -A
           git commit -a -m "upload docs after release ${{ github.event.inputs.releaseVersion }}"
           git push --quiet --force
           git tag -f ${{ github.event.inputs.releaseVersion }}
           git push --quiet --force ${{ github.event.inputs.releaseVersion }}
.travis.yml
File was deleted
opendj-doc-generated-ref/pom.xml
@@ -359,7 +359,7 @@
        <profile>
            <id>man-pages</id>
            <activation>
                    <activeByDefault>true</activeByDefault>
                    <os><family>unix</family></os>
                </activation>
            <build><finalName>${project.groupId}.${project.artifactId}</finalName>
                <plugins>
opendj-doc-maven-plugin/src/main/java/org/forgerock/opendj/maven/doc/GenerateMessageFileMojo.java
@@ -365,7 +365,7 @@
        final JarFile jarFile = new JarFile(
                Paths.get(project.getBuild().getDirectory(), "opendj", "lib", "opendj.jar").toString());
        return jarFile.getInputStream(jarFile.getJarEntry(
                Paths.get("org", "opends", "messages", category + ".properties").toString()));
                Paths.get("org", "opends", "messages", category + ".properties").toString().replace('\\','/')));
    }
    private Map<MessagePropertyKey, String> loadErrorProperties(Properties properties) throws Exception {
opendj-doc-maven-plugin/src/main/java/org/forgerock/opendj/maven/doc/GenerateRefEntriesMojo.java
@@ -274,10 +274,11 @@
                    builder.append(line).append(System.getProperty("line.separator"));
                }
            }
            reader.close();
            writeToFile(builder.toString(), output);
            if (!pageCopy.delete()) {
                throw new IOException("Failed to delete " +  pageCopy.getName());
            }
        if (pageCopy.exists() && !pageCopy.delete()) {
            throw new IOException("Failed to delete " +pageCopy.getPath() + " " + pageCopy.getName());
        }
    }
opendj-packages/opendj-docker/Dockerfile
@@ -1,4 +1,4 @@
FROM openjdk:8-jre-slim
FROM openjdk:11-jre-slim
MAINTAINER Open Identity Platform Community <open-identity-platform-opendj@googlegroups.com>
@@ -14,13 +14,14 @@
    OPENDJ_REPLICATION_TYPE=${OPENDJ_REPLICATION_TYPE} \
    OPENDJ_USER="opendj"
ARG VERSION=@project_version@
WORKDIR /opt
ADD target/opendj-*.zip .
RUN apt-get update \
 && apt-get install -y --no-install-recommends unzip \
 && unzip opendj-*.zip \
 && apt-get install -y --no-install-recommends wget unzip \
 && wget --quiet https://github.com/OpenIdentityPlatform/OpenDJ/releases/download/$VERSION/opendj-$VERSION.zip \
 && unzip opendj-$VERSION.zip \
 && apt-get remove -y --purge unzip \
 && rm -rf /var/lib/apt/lists/* \
 && rm -r opendj-*.zip \
opendj-packages/opendj-docker/Dockerfile-alpine
opendj-packages/opendj-docker/pom.xml
@@ -77,7 +77,8 @@
                  <tasks>
                      <zip basedir="${project.build.directory}" destfile="${project.build.directory}/Dockerfile.zip" includes="opendj-docker/**">
                        <fileset dir="${basedir}">
                            <include name="Dockerfile" />  <!--NOTE DIFFERENCE HERE-->
                            <include name="Dockerfile*" />
                            <include name="../opendj-openshift-template/*.yaml" />
                            <include name="bootstrap/**" />
                            <include name="run.sh" />
                        </fileset>
opendj-packages/opendj-msi/opendj-msi-standard/pom.xml
@@ -183,26 +183,59 @@
                                <copy file="${msi.resources}/opendjbanner.bmp" toDir="${project.build.directory}" />
                                <copy file="${msi.resources}/opendjdialog.bmp" toDir="${project.build.directory}" />
                                
                                <exec executable="wine" resultproperty="WineExitStatusCode" failifexecutionfails="false">
                                <exec osfamily="windows" executable="${project.build.directory}\wix\heat.exe" dir="${project.build.directory}" failifexecutionfails="false" resultproperty="heatStatusCode">
                                   <arg value="dir" /> <arg value="${user.home}\.msi" />
                                    <arg value="-nologo" />
                                    <arg value="-cg" /><arg value="all" />
                                    <arg value="-gg" />
                                    <arg value="-sfrag" />
                                    <arg value="-srd" />
                                    <arg value="-ke" />
                                    <arg value="-dr" /><arg value="OPENDJ" />
                                    <arg value="-var" /><arg value="var.src" />
                                    <arg value="-template" /><arg value="fragment" />
                                    <arg value="-o" /><arg value="payload.wxs" />
                                    <arg value="-v" />
                                </exec>
                                <exec osfamily="windows" executable="${project.build.directory}\wix\candle.exe" dir="${project.build.directory}" resultproperty="candleStatusCode">
                                    <arg value="-nologo" />
                                    <arg value="-dsrc=${user.home}\.msi" />
                                    <arg value="-dname=${product.name}" />
                                    <arg value="-dmajor=${parsedVersion.majorVersion}" />
                                    <arg value="-dminor=${parsedVersion.minorVersion}" />
                                    <arg value="-dpoint=${parsedVersion.incrementalVersion}" />
                                    <arg value="package.wxs" />
                                    <arg value="payload.wxs" />
                                    <arg value="-v" />
                                </exec>
                                <exec osfamily="windows" executable="${project.build.directory}\wix\light.exe" dir="${project.build.directory}" resultproperty="lightStatusCode">
                                    <arg value="-nologo" />
                                    <arg value="-ext" /> <arg value="WixUIExtension" />
                                    <arg value="-out" /> <arg value="${product.name.lowercase}-${project.version}.msi" />
                                    <arg value="-sval" />
                                    <arg value="-v" />
                                    <arg value="package.wixobj" />
                                    <arg value="payload.wixobj" />
                                </exec>
                                <exec osfamily="unix" executable="wine" resultproperty="WineExitStatusCode" failifexecutionfails="false">
                                    <arg value="wineboot" />
                                    <arg value="--init" />
                                </exec>
                                <echo>WineExitStatusCode=${WineExitStatusCode}</echo>
                                
                                <exec executable="sh" resultproperty="WineTricksExitStatusCode" failifexecutionfails="false">
                                <exec osfamily="unix" executable="sh" resultproperty="WineTricksExitStatusCode" failifexecutionfails="false">
                                    <arg value="${project.build.directory}/winetricks/winetricks-LAST.sh" />
                                    <arg value="--unattended" />
                                    <arg value="dotnet40" />
                                    <arg value="dotnet_verifier" />
                                </exec>
                                <echo>WineTricksExitStatusCode=${WineTricksExitStatusCode}</echo>
                                
                                <property name="exec.heat" value="wine" /><property name="param.heat" value="${project.build.directory}/wix/heat.exe" />
                                <property name="exec.candle" value="wine" /><property name="param.candle" value="${project.build.directory}/wix/candle.exe" />
                                <property name="exec.light" value="wine" /><property name="param.light" value="${project.build.directory}/wix/light.exe" />
                                <echo>------------------- ${exec.heat} ${param.heat} -------------------</echo>
                                <exec executable="${exec.heat}" dir="${project.build.directory}" failifexecutionfails="false" resultproperty="heatStatusCode">
                                <exec osfamily="unix"  executable="${exec.heat}" dir="${project.build.directory}" failifexecutionfails="false" resultproperty="heatStatusCode">
                                   <arg value="${param.heat}" />
                                    <arg value="dir" /> <arg value="${user.home}/.msi" />
                                    <arg value="-nologo" />
@@ -217,9 +250,8 @@
                                    <arg value="-o" /><arg value="payload.wxs" />
                                    <arg value="-v" />
                                </exec>
                                <echo>heatStatusCode=${heatStatusCode}</echo>
                                <echo>------------------- ${exec.candle} ${param.candle} -------------------</echo>
                                <exec executable="${exec.candle}" dir="${project.build.directory}" resultproperty="candleStatusCode">
                                <exec osfamily="unix" executable="${exec.candle}" dir="${project.build.directory}" resultproperty="candleStatusCode">
                                       <arg value="${param.candle}" />
                                    <arg value="-nologo" />
                                    <arg value="-dsrc=${user.home}/.msi" />
@@ -231,9 +263,8 @@
                                    <arg value="payload.wxs" />
                                    <arg value="-v" />
                                </exec>
                                <echo>candleStatusCode=${candleStatusCode}</echo>
                                <echo>------------------- ${exec.light} ${param.light} -------------------</echo>
                                <exec executable="${exec.light}" dir="${project.build.directory}" resultproperty="lightStatusCode">
                                <exec osfamily="unix" executable="${exec.light}" dir="${project.build.directory}" resultproperty="lightStatusCode">
                                       <arg value="${param.light}" />
                                    <arg value="-nologo" />
                                    <arg value="-ext" /> <arg value="WixUIExtension" />
@@ -243,11 +274,11 @@
                                    <arg value="package.wixobj" />
                                    <arg value="payload.wixobj" />
                                </exec>
                                <echo>lightStatusCode=${lightStatusCode}</echo>
                                <chmod file="${project.build.directory}/${product.name.lowercase}-${project.version}.msi" perm="ugo+r" verbose="true" />
                                <exec executable="ls" dir="${project.build.directory}">
                                <exec osfamily="unix" executable="ls" dir="${project.build.directory}">
                                       <arg value="-laht" />
                                </exec>
                                <delete dir="${user.home}/.msi" />
                                <attachartifact file="${project.build.directory}/${product.name.lowercase}-${project.version}.msi" />
                            </target>
opendj-packages/opendj-msi/pom.xml
@@ -85,9 +85,9 @@
                <module>opendj-msi-standard</module>
            </modules>
            <properties>
                <exec.heat>${project.build.directory}/wix/heat.exe</exec.heat><param.heat />
                <exec.candle>${project.build.directory}/wix/candle.exe</exec.candle><param.candle />
                <exec.light>${project.build.directory}/wix/light.exe</exec.light><param.light />
                <exec.heat>${project.build.directory}\wix\heat.exe</exec.heat><param.heat />
                <exec.candle>${project.build.directory}\wix\candle.exe</exec.candle><param.candle />
                <exec.light>${project.build.directory}\wix\light.exe</exec.light><param.light />
            </properties>
        </profile>
    </profiles>
opendj-packages/pom.xml
@@ -43,9 +43,9 @@
    <profiles>
        <profile>
            <id>distribution</id>
            <id>distribution-unix</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <os><family>unix</family></os>
            </activation>
            <modules>
                <module>../opendj-doc-generated-ref</module>
@@ -56,6 +56,16 @@
                <module>opendj-docker</module>
            </modules>
        </profile>
        <profile>
            <id>distribution-windows</id>
            <activation>
                <os><family>windows</family></os>
            </activation>
            <modules>
                <module>opendj-msi</module>
                <module>opendj-docker</module>
            </modules>
        </profile>
    </profiles>
    <build><finalName>${project.groupId}.${project.artifactId}</finalName>
pom.xml
@@ -80,7 +80,7 @@
        <license>
            <name>CDDL-1.1</name>
            <url>https://github.com/OpenIdentityPlatform/OpenDJ/blob/master/LICENSE.md</url>
            <comments>Common Development and Distribution License (CDDL) 1.0.
            <comments>Common Development and Distribution License (CDDL) 1.1.
                This license applies to OpenDJ source code as indicated in the
                source files.
            </comments>
@@ -144,7 +144,7 @@
            <dependency>
                <groupId>org.openidentityplatform.commons</groupId>
                <artifactId>parent</artifactId>
                <version>2.0.13-SNAPSHOT</version>
                <version>2.0.14</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
@@ -325,7 +325,7 @@
            <plugin>
              <groupId>org.sonatype.plugins</groupId>
              <artifactId>nexus-staging-maven-plugin</artifactId>
              <version>1.6.11</version>
              <version>1.6.12</version>
              <extensions>true</extensions>
              <configuration>
                <serverId>ossrh</serverId>
@@ -335,6 +335,13 @@
                <keepStagingRepositoryOnFailure>true</keepStagingRepositoryOnFailure>
                <keepStagingRepositoryOnCloseRuleFailure>true</keepStagingRepositoryOnCloseRuleFailure>
              </configuration>
              <dependencies>
                <dependency>
                    <groupId>com.google.guava</groupId>
                    <artifactId>guava</artifactId>
                    <version>15.0</version>
                 </dependency>
              </dependencies>
            </plugin>
        </plugins>