Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixing CODEARTIFACT_DOWNLOAD_URL to be able to retrieve both CI and Release artifacts #4354

Merged
merged 4 commits into from
Feb 20, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 40 additions & 29 deletions .github/workflows/CI.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
branches: [ "dev" ]

env:
CODEARTIFACT_DOWNLOAD_URL: ${{ secrets.CODEARTIFACT_DOWNLOAD_URL }}
CODEARTIFACT_BUILD_SERVICE_LIVE_URL: ${{ secrets.CODEARTIFACT_BUILD_SERVICE_LIVE_URL }}
CODEARTIFACT_USERNAME: ${{ secrets.CODEARTIFACT_USERNAME }}
ECR_NEO4J_DOCKER_URL: ${{ secrets.ECR_NEO4J_DOCKER_URL }}
BRANCH_NAME: ${{ github.event.pull_request.base.ref }}
Expand Down Expand Up @@ -45,28 +45,32 @@ jobs:
- uses: ./.github/actions/setup-jdk
- uses: ./.github/actions/setup-gradle-cache

- name: Determine latest neo4j CI version and docker images
- name: Determine CODEARTIFACT_DOWNLOAD_URL, NEO4JVERSION and Docker Image environment variables
run: |
echo "Current branch BRANCH_NAME=$BRANCH_NAME"
neo4j_version_base=$(grep -e "neo4jVersion = .*" build.gradle | cut -d '=' -f 2 | tr -d \'\" | tr -d ' ')
echo "neo4j_version_base=$neo4j_version_base"
NEO4JVERSION=`aws --no-cli-pager codeartifact list-package-versions --domain build-service-live --domain-owner ${{ secrets.AWS_ACCOUNT_ID }} --repository ci-live --format maven --namespace org.neo4j --package neo4j --sort-by PUBLISHED_TIME --status Published --query "versions[?starts_with(version, '$neo4j_version_base')].version | [0]" --output json | sed 's/"//g'`
if [ -z "$NEO4JVERSION" ] || [ "$NEO4JVERSION" = "null" ]; then
NEO4JVERSION="$neo4j_version_base"
fi
echo "NEO4JVERSION=$NEO4JVERSION" >> "$GITHUB_ENV"
echo "Found NEO4JVERSION=$NEO4JVERSION"
if [[ $BRANCH_NAME =~ ^5.[0-9]+$ ]]; then
NEO4J_DOCKER_EE_OVERRIDE="neo4j:$neo4j_version_base-enterprise"
NEO4J_DOCKER_CE_OVERRIDE="neo4j:$neo4j_version_base"
if [[ $BRANCH_NAME == "dev" ]]; then
echo "Running on dev branch and so pointing to ci-live repository in AWS CodeArtifact for CI artifacts"
CODEARTIFACT_DOWNLOAD_URL="$CODEARTIFACT_BUILD_SERVICE_LIVE_URL/maven/ci-live"
NEO4JVERSION=`aws --no-cli-pager codeartifact list-package-versions --domain build-service-live --domain-owner ${{ secrets.AWS_ACCOUNT_ID }} --repository ci-live --format maven --namespace org.neo4j --package neo4j --sort-by PUBLISHED_TIME --status Published --query "versions[?starts_with(version, '$neo4j_version_base')].version | [0]" --output json | sed 's/"//g'`
NEO4J_DOCKER_CE_OVERRIDE="$ECR_NEO4J_DOCKER_URL/build-service/neo4j:$neo4j_version_base-community-debian-nightly"
NEO4J_DOCKER_EE_OVERRIDE="$ECR_NEO4J_DOCKER_URL/build-service/neo4j:$neo4j_version_base-enterprise-debian-nightly"
else
NEO4J_DOCKER_CE_OVERRIDE="$ECR_NEO4J_DOCKER_URL:$neo4j_version_base-community-debian-nightly"
NEO4J_DOCKER_EE_OVERRIDE="$ECR_NEO4J_DOCKER_URL:$neo4j_version_base-enterprise-debian-nightly"
echo "Running on branch $BRANCH_NAME and so pointing to release-live repository in AWS CodeArtifact for release artifacts"
CODEARTIFACT_DOWNLOAD_URL="$CODEARTIFACT_BUILD_SERVICE_LIVE_URL/maven/release-live"
NEO4JVERSION=$neo4j_version_base
NEO4J_DOCKER_CE_OVERRIDE="neo4j:$neo4j_version_base"
NEO4J_DOCKER_EE_OVERRIDE="neo4j:$neo4j_version_base-enterprise"
fi
echo "NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE" >> "$GITHUB_ENV"
echo "CODEARTIFACT_DOWNLOAD_URL=$CODEARTIFACT_DOWNLOAD_URL" >> "$GITHUB_ENV"

echo "Found NEO4JVERSION=$NEO4JVERSION"
echo "Found NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE"
echo "Found NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE"

echo "NEO4JVERSION=$NEO4JVERSION" >> "$GITHUB_ENV"
echo "NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE" >> "$GITHUB_ENV"
echo "Found NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE"
echo "Current branch BRANCH_NAME=$BRANCH_NAME"
echo "NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE" >> "$GITHUB_ENV"

- name: Compile Java
run: |
Expand Down Expand Up @@ -123,25 +127,32 @@ jobs:
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}

- name: Determine latest neo4j CI version and docker images
- name: Determine CODEARTIFACT_DOWNLOAD_URL, NEO4JVERSION and Docker Image environment variables
run: |
echo "Current branch BRANCH_NAME=$BRANCH_NAME"
neo4j_version_base=$(grep -e "neo4jVersion = .*" build.gradle | cut -d '=' -f 2 | tr -d \'\" | tr -d ' ')
echo "neo4j_version_base=$neo4j_version_base"
NEO4JVERSION=`aws codeartifact list-package-versions --domain build-service-live --domain-owner ${{ secrets.AWS_ACCOUNT_ID }} --repository ci-live --format maven --namespace org.neo4j --package neo4j --sort-by PUBLISHED_TIME --query "versions[?starts_with(version,'$neo4j_version_base')] | [0].version" | tr -d '" '`
echo "NEO4JVERSION=$NEO4JVERSION" >> "$GITHUB_ENV"
echo "Found NEO4JVERSION=$NEO4JVERSION"
if [[ $BRANCH_NAME =~ ^5.[0-9]+$ ]]; then
NEO4J_DOCKER_EE_OVERRIDE="neo4j:$neo4j_version_base-enterprise"
NEO4J_DOCKER_CE_OVERRIDE="neo4j:$neo4j_version_base"
else
if [[ $BRANCH_NAME == "dev" ]]; then
echo "Running on dev branch and so pointing to ci-live repository in AWS CodeArtifact for CI artifacts"
CODEARTIFACT_DOWNLOAD_URL="$CODEARTIFACT_BUILD_SERVICE_LIVE_URL/maven/ci-live"
NEO4JVERSION=`aws --no-cli-pager codeartifact list-package-versions --domain build-service-live --domain-owner ${{ secrets.AWS_ACCOUNT_ID }} --repository ci-live --format maven --namespace org.neo4j --package neo4j --sort-by PUBLISHED_TIME --status Published --query "versions[?starts_with(version, '$neo4j_version_base')].version | [0]" --output json | sed 's/"//g'`
NEO4J_DOCKER_CE_OVERRIDE="$ECR_NEO4J_DOCKER_URL/build-service/neo4j:$neo4j_version_base-community-debian-nightly"
NEO4J_DOCKER_EE_OVERRIDE="$ECR_NEO4J_DOCKER_URL/build-service/neo4j:$neo4j_version_base-enterprise-debian-nightly"
else
echo "Running on branch $BRANCH_NAME and so pointing to release-live repository in AWS CodeArtifact for release artifacts"
CODEARTIFACT_DOWNLOAD_URL="$CODEARTIFACT_BUILD_SERVICE_LIVE_URL/maven/release-live"
NEO4JVERSION=$neo4j_version_base
NEO4J_DOCKER_CE_OVERRIDE="neo4j:$neo4j_version_base"
NEO4J_DOCKER_EE_OVERRIDE="neo4j:$neo4j_version_base-enterprise"
fi
echo "NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE" >> "$GITHUB_ENV"
echo "CODEARTIFACT_DOWNLOAD_URL=$CODEARTIFACT_DOWNLOAD_URL" >> "$GITHUB_ENV"

echo "Found NEO4JVERSION=$NEO4JVERSION"
echo "Found NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE"
echo "Found NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE"

echo "NEO4JVERSION=$NEO4JVERSION" >> "$GITHUB_ENV"
echo "NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE" >> "$GITHUB_ENV"
echo "Found NEO4J_DOCKER_CE_OVERRIDE=$NEO4J_DOCKER_CE_OVERRIDE"
echo "Current branch BRANCH_NAME=$BRANCH_NAME"
echo "NEO4J_DOCKER_EE_OVERRIDE=$NEO4J_DOCKER_EE_OVERRIDE" >> "$GITHUB_ENV"

- name: Init gradle
run: |
Expand Down
8 changes: 6 additions & 2 deletions extended/src/main/java/apoc/cypher/CypherExtended.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.neo4j.graphdb.Result;
import org.neo4j.graphdb.Transaction;
import org.neo4j.graphdb.security.URLAccessChecker;
import org.neo4j.internal.kernel.api.procs.ProcedureCallContext;
import org.neo4j.logging.Log;
import org.neo4j.procedure.Context;
import org.neo4j.procedure.Description;
Expand Down Expand Up @@ -84,6 +85,9 @@ public class CypherExtended {
@Context
public URLAccessChecker urlAccessChecker;

@Context
public ProcedureCallContext procedureCallContext;

@Procedure(name = "apoc.cypher.runFile", mode = WRITE)
@Description("apoc.cypher.runFile(file or url,[{statistics:true,timeout:10,parameters:{}}]) - runs each statement in the file, all semicolon separated - currently no schema operations")
public Stream<RowResult> runFile(@Name("file") String fileName, @Name(value = "config",defaultValue = "{}") Map<String,Object> config) {
Expand Down Expand Up @@ -386,7 +390,7 @@ public static String compiled(String fragment) {
@Procedure
@Description("apoc.cypher.parallel(fragment, `paramMap`, `keyList`) yield value - executes fragments in parallel through a list defined in `paramMap` with a key `keyList`")
public Stream<CypherStatementMapResult> parallel(@Name("fragment") String fragment, @Name("params") Map<String, Object> params, @Name("parallelizeOn") String key) {
if (params == null) return runCypherQuery(tx, fragment, params);
if (params == null) return runCypherQuery(tx, fragment, params, procedureCallContext);
if (key == null || !params.containsKey(key))
throw new RuntimeException("Can't parallelize on key " + key + " available keys " + params.keySet());
Object value = params.get(key);
Expand Down Expand Up @@ -473,7 +477,7 @@ public Map<String, Object> parallelParams(@Name("params") Map<String, Object> pa
@Procedure
@Description("apoc.cypher.parallel2(fragment, `paramMap`, `keyList`) yield value - executes fragments in parallel batches through a list defined in `paramMap` with a key `keyList`")
public Stream<CypherStatementMapResult> parallel2(@Name("fragment") String fragment, @Name("params") Map<String, Object> params, @Name("parallelizeOn") String key) {
if (params == null) return runCypherQuery(tx, fragment, params);
if (params == null) return runCypherQuery(tx, fragment, params, procedureCallContext);
if (StringUtils.isEmpty(key) || !params.containsKey(key))
throw new RuntimeException("Can't parallelize on key " + key + " available keys " + params.keySet() + ". Note that parallelizeOn parameter must be not empty");
Object value = params.get(key);
Expand Down
21 changes: 18 additions & 3 deletions extended/src/test/java/apoc/systemdb/SystemDbTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import static apoc.ApocConfig.APOC_TRIGGER_ENABLED;
import static apoc.ApocConfig.apocConfig;
Expand Down Expand Up @@ -122,8 +123,8 @@ public void testWriteStatements() {
@Test
public void testExportMetadata() {
// We test triggers
final String triggerOne = "CALL apoc.trigger.add('firstTrigger', 'RETURN $alpha', {phase:\"after\"}, {params: {alpha:1}});";
final String triggerTwo = "CALL apoc.trigger.add('beta', 'RETURN 1', {}, {params: {}});";
final String triggerOne = "CALL apoc.trigger.add('firstTrigger', 'CYPHER 5 RETURN $alpha', {phase:\"after\"}, {params: {alpha:1}});";
final String triggerTwo = "CALL apoc.trigger.add('beta', 'CYPHER 5 RETURN 1', {}, {params: {}});";
// In this case we paused to test that it will be exported as paused
final String pauseTrigger = "CALL apoc.trigger.pause('beta');";
db.executeTransactionally(triggerOne);
Expand Down Expand Up @@ -154,7 +155,13 @@ public void testExportMetadata() {

assertEquals(Set.of(constraintForUuid), readFileLines("metadata.Uuid.schema.neo4j.cypher", directory));
assertEquals(Set.of(uuidStatement), readFileLines("metadata.Uuid.neo4j.cypher", directory));
assertEquals(Set.of(triggerOne, triggerTwo, pauseTrigger), readFileLines("metadata.Trigger.neo4j.cypher", directory));
Set<String> expectedTriggers = Stream.of(triggerOne, triggerTwo, pauseTrigger)
.map(SystemDbTest::removeDuplicatedWhitespaces)
.collect(Collectors.toSet());
Set<String> actualTriggers = readFileLines("metadata.Trigger.neo4j.cypher", directory).stream()
.map(SystemDbTest::removeDuplicatedWhitespaces)
.collect(Collectors.toSet());
assertEquals(expectedTriggers, actualTriggers);
final String declareProcedureOutput = "CALL apoc.custom.declareProcedure('declareBar(one = 2 :: INTEGER, two = 3 :: INTEGER) :: (sum :: INTEGER)', 'RETURN $one + $two as sum', 'READ', '');";
assertEquals(Set.of(declareProcedureOutput), readFileLines("metadata.CypherProcedure.neo4j.cypher", directory));
final String declareFunctionOutput = "CALL apoc.custom.declareFunction('declareFoo(input :: INTEGER | FLOAT) :: INTEGER', 'RETURN $input as answer', false, '');";
Expand All @@ -178,6 +185,14 @@ public void testExportMetadata() {
assertEquals(Set.of(uuidStatement), readFileLines("custom.Uuid.neo4j.cypher", directory));
}

/**
* Remove possible multiple whitespaces, e.g. "CYPHER 5 <query>",
* since is handled by Core and not modifiable from Extended
*/
private static String removeDuplicatedWhitespaces(String val) {
return val.replaceAll("\\s+", " ");
}

@Test
public void testExportMetadataWithTypeInputOrFloat() {
final String declareFunctionWithNumber = "CALL apoc.custom.declareFunction('declareFooNumber(input :: INTEGER | FLOAT) :: INTEGER', 'RETURN $input as answer', false, '');";
Expand Down
Loading