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 100% rename from build/.bashrc rename to build/setenv.sh 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/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..3c29477 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, id); + } + final String message = String.format( - "%s imported.", - object.getString("refId") + "%s imported (%s).", + object.getString("refId"), + object.getString("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");