From badaeda2ddc802a4aef7266e2d74539a3b158e85 Mon Sep 17 00:00:00 2001 From: Mathieu Cartoixa Date: Tue, 4 Jun 2024 15:04:07 +0200 Subject: [PATCH] Add references property to the force-data-tree-import task --- .github/workflows/build.yml | 88 +++++++++++++++++++ build.sh | 2 +- build/{.bashrc => setenv.sh} | 2 +- docs/force-data-tree-import.html | 5 ++ map_drive.cmd | 16 ++++ .../ant/sfdx/force/data/tree/ImportTask.java | 22 ++++- .../sfdx/force/data/tree/ImportTaskTest.java | 6 ++ .../ant/sfdx/force/data/tree/import.xml | 2 +- 8 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 .github/workflows/build.yml rename build/{.bashrc => setenv.sh} (98%) create mode 100644 map_drive.cmd diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..c4224f8 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,88 @@ +name: build + +on: + push: + paths-ignore: + - '.vscode/**' + - '.editorconfig' + - '**.md' + +jobs: + build: + runs-on: ubuntu-latest + env: + PACKAGE_VERSION: 1.2.${{ github.run_number }} + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + java-version: 8 + java-package: jdk + distribution: temurin + - name: Cache binary dependencies + uses: actions/cache@v3 + with: + path: | + .tmp/* + .tmp/cloc.pl + !.tmp/*.gz + !.tmp/*.xz + !.tmp/*.zip + key: bin-${{ hashFiles('build/versions.env') }} + - name: Cache Ivy dependencies + uses: actions/cache@v3 + with: + path: ivy + key: ivy-${{hashFiles('ivy.xml')}} + - name: Prepare build environment + shell: bash + run: | + source build/setenv.sh + # Only way to share environment variables between steps... + echo "ANT_HOME=$ANT_HOME" >> $GITHUB_ENV + echo "PMD_HOME=$PMD_HOME" >> $GITHUB_ENV + echo "$ANT_HOME/bin" >> $GITHUB_PATH + + mkdir -p ivy + if [ ! -f ivy/ivy.jar ]; then wget -nv -O ivy/ivy.jar https://repo1.maven.org/maven2/org/apache/ivy/ivy/$_IVY_VERSION/ivy-$_IVY_VERSION.jar; fi + java -jar ivy/ivy.jar -retrieve "ivy/lib/[conf]/[artifact].[ext]" -confs build + - name: Build + shell: bash + run: | + ant -noclasspath -nouserlib -noinput -logger org.apache.tools.ant.listener.AnsiColorLogger -Dverbosity=debug -f build.xml release + - name: Ruby Tests Report + if: success() || failure() + uses: dorny/test-reporter@v1 + with: + name: JUnit Tests + path: tmp/junit-results.xml + reporter: java-junit + fail-on-error: true + - name: Archive artifacts + uses: actions/upload-artifact@v4 + with: + name: artifacts + path: | + tmp/out/bin/**.* + - name: Archive logs + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: logs + path: | + build.log + retention-days: 2 + - name: Archive results + if: ${{ always() }} + uses: actions/upload-artifact@v4 + with: + name: results + path: | + tmp/junit-results + tmp/*-results.html + tmp/*-results.xml + retention-days: 8 diff --git a/build.sh b/build.sh index 9920e9e..ebf3de7 100755 --- a/build.sh +++ b/build.sh @@ -1,6 +1,6 @@ #!/bin/bash -source build/.bashrc +source build/setenv.sh diff --git a/build/.bashrc b/build/setenv.sh similarity index 98% rename from build/.bashrc rename to build/setenv.sh index 30b48d0..5f69c0d 100755 --- a/build/.bashrc +++ b/build/setenv.sh @@ -29,7 +29,7 @@ esac #Ant export ANT_HOME=$(pwd)/.tmp/apache-ant-$_ANT_VERSION -if [ ! -f $_ANT_HOME/bin/ant ]; then +if [ ! -f $ANT_HOME/bin/ant ]; then wget -nv $_wget_interactive_options -O .tmp/apache-ant-$_ANT_VERSION-bin.tar.gz https://archive.apache.org/dist/ant/binaries/apache-ant-$_ANT_VERSION-bin.tar.gz tar -xzvf .tmp/apache-ant-$_ANT_VERSION-bin.tar.gz -C .tmp fi diff --git a/docs/force-data-tree-import.html b/docs/force-data-tree-import.html index 9f332de..d8d2fca 100644 --- a/docs/force-data-tree-import.html +++ b/docs/force-data-tree-import.html @@ -52,6 +52,11 @@

Parameters

A username or alias for the target org. No + + referencesproperty + The name of a property in which the references of the imported data should be stored. Subproperties are named according to the (lowercased) references ids of the imported data. + No + diff --git a/map_drive.cmd b/map_drive.cmd new file mode 100644 index 0000000..5bfc5a0 --- /dev/null +++ b/map_drive.cmd @@ -0,0 +1,16 @@ +@ECHO OFF +::-------------------------------------------------------------------- +:: Usage: "mad_drive " +:: +:: - Optional. W: by default. +::-------------------------------------------------------------------- + +SETLOCAL +SET MAPPED_DRIVE_NAME=%~1 +IF "x%MAPPED_DRIVE_NAME%x"=="xx" SET MAPPED_DRIVE_NAME=W: + +NET USE %MAPPED_DRIVE_NAME% /DELETE +SUBST %MAPPED_DRIVE_NAME% /D >NUL +SUBST %MAPPED_DRIVE_NAME% "%~dp0." + +ENDLOCAL diff --git a/src/main/com/mcartoixa/ant/sfdx/force/data/tree/ImportTask.java b/src/main/com/mcartoixa/ant/sfdx/force/data/tree/ImportTask.java index f2cb1b3..e9fde03 100644 --- a/src/main/com/mcartoixa/ant/sfdx/force/data/tree/ImportTask.java +++ b/src/main/com/mcartoixa/ant/sfdx/force/data/tree/ImportTask.java @@ -58,9 +58,17 @@ protected void doParse(final JSONObject json) { final Object value = result.get(i); if (value instanceof JSONObject) { final JSONObject object = (JSONObject) value; + final String refId = object.getString("refId"); + final String id = object.getString("id"); + final String referencesProperty = ImportTask.this.getReferencesProperty(); + if (referencesProperty != null && !referencesProperty.isEmpty()) { + ImportTask.this.getProject().setNewProperty(referencesProperty + "." + refId.toLowerCase(), id); + } + final String message = String.format( - "%s imported.", - object.getString("refId") + "%s imported (%s).", + refId, + id ); this.log(message, Project.MSG_INFO); } @@ -151,6 +159,10 @@ public void setPlan(final File plan) { } } + public void setReferencesProperty(final String referencesProperty) { + this.referencesProperty = referencesProperty; + } + public void setTargetUserName(final String userName) { if (userName != null && !userName.isEmpty()) { getCommandline().createArgument().setValue("-u"); @@ -210,6 +222,12 @@ protected ISfdxJsonParser getParser() { return new ImportTask.JsonParser(); } + @SuppressWarnings("PMD.DefaultPackage") + /* default */ String getReferencesProperty() { + return this.referencesProperty; + } + private transient final List fileSets = new ArrayList<>(); + private transient String referencesProperty; private transient Union resources = null; } diff --git a/src/test/com/mcartoixa/ant/sfdx/force/data/tree/ImportTaskTest.java b/src/test/com/mcartoixa/ant/sfdx/force/data/tree/ImportTaskTest.java index 3223a89..abeafaf 100644 --- a/src/test/com/mcartoixa/ant/sfdx/force/data/tree/ImportTaskTest.java +++ b/src/test/com/mcartoixa/ant/sfdx/force/data/tree/ImportTaskTest.java @@ -49,6 +49,12 @@ public void executeShouldSetStatusProperty() { Assert.assertEquals("Status property should be set", "0", buildRule.getProject().getProperty("execute.status")); } + @Test + public void executeShouldSetReferencesProperties() { + buildRule.executeTarget("execute"); + Assert.assertEquals("References properties should be set", "a063N000004OhI8QAK", buildRule.getProject().getProperty("execute.references.object__cref2")); + } + @Test public void executeShouldAddJsonArgument() { buildRule.executeTarget("execute"); diff --git a/src/test/com/mcartoixa/ant/sfdx/force/data/tree/import.xml b/src/test/com/mcartoixa/ant/sfdx/force/data/tree/import.xml index dfe6b04..a7de0a6 100644 --- a/src/test/com/mcartoixa/ant/sfdx/force/data/tree/import.xml +++ b/src/test/com/mcartoixa/ant/sfdx/force/data/tree/import.xml @@ -13,7 +13,7 @@ - +