@@ -5,6 +5,53 @@ variables:
55stages :
66 - build_and_test
77
8+ .detect-branches :
9+ # Detects source and target branches.
10+ # ADACORE_CI_SOURCE_BRANCH is set to source branch (merge request, pull)
11+ # ADACORE_CI_TARGET_BRANCH is set to target branch of merge request, or 'master'/'edge' for pull
12+ # ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX is set to '-edge' when target repository is 'edge'
13+ # ADACORE_CI_ANOD_EDGE_QUALIFIER is set to '--qualifier=edge' when target repository is 'edge'
14+ # ADACORE_CI_SUBPROJECTS_ROOT is set to '/tmp' and may be overritten by script
15+ - |
16+ if [[ -n "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]]; then
17+ ADACORE_CI_TARGET_BRANCH="$CI_MERGE_REQUEST_TARGET_BRANCH_NAME";
18+ elif [[ "x$CI_COMMIT_BRANCH" == "xedge" ]]; then
19+ ADACORE_CI_TARGET_BRANCH="edge";
20+ else
21+ ADACORE_CI_TARGET_BRANCH="master";
22+ fi;
23+ if [[ -n "$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME" ]]; then
24+ ADACORE_CI_SOURCE_BRANCH="$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME";
25+ else
26+ ADACORE_CI_SOURCE_BRANCH="$CI_COMMIT_BRANCH";
27+ fi;
28+ if [[ "$ADACORE_CI_TARGET_BRANCH" == "edge" ]]; then
29+ ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX="-edge";
30+ ADACORE_CI_ANOD_EDGE_QUALIFIER="--qualifier=edge"
31+ else
32+ ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX="";
33+ ADACORE_CI_ANOD_EDGE_QUALIFIER=""
34+ fi
35+ ADACORE_CI_SUBPROJECTS_ROOT=/tmp
36+ echo "Source branch: $ADACORE_CI_SOURCE_BRANCH"
37+ echo "Target branch: $ADACORE_CI_TARGET_BRANCH"
38+ echo "Name suffix: $ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX"
39+ echo "Qualifier: $ADACORE_CI_ANOD_EDGE_QUALIFIER"
40+ echo "Subprojects: $ADACORE_CI_SUBPROJECTS_ROOT"
41+
42+ .checkout :
43+ # Variables:
44+ # ADACODE_CI_SUBPROJECTS_ROOT - root directory to checkout repositories.
45+ # ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH - path component of the repository's URL.
46+ # ADACORE_CI_SUBPROJECT_NAME - name of the directory for subproject.
47+ - |
48+ git -C $ADACORE_CI_SUBPROJECTS_ROOT clone $GIT_CLONE_BASE/$ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH $ADACORE_CI_SUBPROJECT_NAME
49+ if `git -C $ADACORE_CI_SUBPROJECTS_ROOT -C $ADACORE_CI_SUBPROJECT_NAME show-ref $ADACORE_CI_SOURCE_BRANCH > /dev/null`; then
50+ git -C $ADACORE_CI_SUBPROJECTS_ROOT -C $ADACORE_CI_SUBPROJECT_NAME checkout $ADACORE_CI_SOURCE_BRANCH;
51+ elif `git -C $ADACORE_CI_SUBPROJECTS_ROOT -C $ADACORE_CI_SUBPROJECT_NAME show-ref $ADACORE_CI_TARGET_BRANCH > /dev/null`; then
52+ git -C $ADACORE_CI_SUBPROJECTS_ROOT -C $ADACORE_CI_SUBPROJECT_NAME checkout $ADACORE_CI_TARGET_BRANCH;
53+ fi
54+ anod vcs --sandbox-dir /it/wave --add-repo $ADACORE_CI_SUBPROJECT_NAME $ADACORE_CI_SUBPROJECTS_ROOT/$ADACORE_CI_SUBPROJECT_NAME
855
956# Build and test with ANOD
1057# TODO: add a build and test based on Alire in parallel to this.
@@ -22,54 +69,48 @@ build_and_test:
2269 script :
2370 - . ~/.aws_container_credentials
2471 - export PATH=/it/e3/bin:$PATH
72+ - !reference [.detect-branches]
2573
26- # Check whether we're in an MR targeting 'edge' and setup some
27- # variables if so.
28- - TARGET_BRANCH="master"
29- - if [ "x$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" = "xedge" ]; then
30- echo "Targeting the edge branch." ;
31- REPO_SUFFIX="-edge" ;
32- BUILD_SPACE_SUFFIX="_edge" ;
33- QUALIFIER="edge" ;
34- TARGET_BRANCH="edge" ;
35- fi
74+ - |
75+ ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH=/eng/ide/spawn
76+ ADACORE_CI_SUBPROJECT_NAME=spawn
77+ - !reference [.checkout]
78+
79+ - |
80+ ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH=/eng/ide/vss
81+ ADACORE_CI_SUBPROJECT_NAME=vss
82+ - !reference [.checkout]
3683
37- # Setup the 'anod vcs' for this repo
38- - cd /it/wave
39- - anod vcs --add-repo ada_language_server${REPO_SUFFIX} $CI_PROJECT_DIR
84+ - |
85+ ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH=/eng/ide/markdown
86+ ADACORE_CI_SUBPROJECT_NAME=markdown
87+ - !reference [.checkout]
4088
41- # Figure out if we're on a sync branch
42- - BRANCH=master
43- - if [[ $CI_COMMIT_BRANCH =~ ^sync/ ]]; then
44- BRANCH=$CI_COMMIT_BRANCH;
45- elif [[ $CI_MERGE_REQUEST_SOURCE_BRANCH_NAME =~ ^sync/ ]]; then
46- BRANCH=$CI_MERGE_REQUEST_SOURCE_BRANCH_NAME;
89+ - |
90+ ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH=/eng/ide/gnatdoc
91+ ADACORE_CI_SUBPROJECT_NAME=gnatdoc$ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX
92+ - !reference [.checkout]
93+
94+ - |
95+ ADACORE_CI_SUBPROJECT_REPOSITORY_URL_PATH=/eng/ide/gnatstudio-internal
96+ ADACORE_CI_SUBPROJECT_NAME=gnatstudio-internal$ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX
97+ - !reference [.checkout]
98+
99+ - if [[ "$ADACORE_CI_TARGET_BRANCH" == "edge" ]]; then
100+ BUILD_SPACE_SUFFIX="_edge";
47101 fi
48102
49- # Setup the 'anod vcs' for the other repos, if we're on
50- # a "sync" branch.
51- - for subproject in vss spawn gnatdoc ; do
52- echo "for subproject $subproject ..." ;
53- cd /tmp ;
54- git clone $GIT_CLONE_BASE/eng/ide/$subproject ;
55- cd $subproject ;
56- if `git show-ref $BRANCH > /dev/null` ; then
57- echo "... checking out $BRANCH"
58- git checkout $BRANCH ;
59- cd /it/wave ;
60- anod vcs --add-repo $subproject /tmp/$subproject ;
61- else
62- echo "... checking out $TARGET_BRANCH"
63- git checkout $TARGET_BRANCH ;
64- fi ;
65- done ;
66-
67- # Build & test using anod
68- - cd /it/wave
69- - anod build als --qualifier=$QUALIFIER --minimal
70- - anod test als --qualifier=$QUALIFIER --minimal
71-
72- # Process the report
103+ - |
104+ # Setup the 'anod vcs' for this repo
105+ cd /it/wave
106+ anod vcs --add-repo ada_language_server$ADACORE_CI_SUBPROJECT_REPOSITORY_NAME_EDGE_SUFFIX $CI_PROJECT_DIR
107+
108+ # Build & test using anod
109+ cd /it/wave
110+ - anod build als $ADACORE_CI_ANOD_EDGE_QUALIFIER --minimal
111+ - anod test als $ADACORE_CI_ANOD_EDGE_QUALIFIER --minimal
112+
113+ # Process the report
73114 - e3-testsuite-report
74115 --failure-exit-code 1
75116 --xunit-output $CI_PROJECT_DIR/xunit_output.xml
0 commit comments