diff --git a/.circleci/config.yml b/.circleci/config.yml index b5ec4b72..b3d8c191 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -52,7 +52,7 @@ jobs: command: | go mod vendor - run: cf login -a $CF_API -o $ORG -s $SPACE -u $TECH_USER -p $TECH_PASS - - run: cd integration && go test -tags=integration + - run: cd integration && go test -tags=integration compliance: docker: @@ -139,6 +139,102 @@ jobs: export GITHUB_TOKEN=${CLOUD_MTA_BOT_GITHUB_TOKEN} curl -sfL https://goreleaser.com/static/run | bash + publish-to-dockerhub-java8-node14: + docker: + - image: cimg/go:1.17 + working_directory: ~/go/src/github.com/young-yang03/cloud-mta-build-tool + steps: + - checkout + - setup_remote_docker: + version: 20.10.6 + - run: + name: build image pre-setup + command: | + #Make sure HEAD points to master + git checkout master + git fetch + git rebase + - run: + name: build Java 8.1.091 & Node 14.21.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + sh $PWD/scripts/build_image 8.1.091 14.21.1 ${MBT_VERSION} + - run: + name: publish Java 8.1.091 & Node 14.21.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + echo "Image release: ${MBT_VERSION}" + #Push to Docker Hub + echo "$DOCKER_HUB_TOKEN" | docker login --username $DOCKER_HUB_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 14.21.1 ${MBT_VERSION} "cobra217" + #Push to GitHub Container Registry + echo "$CLOUD_MTA_BOT_GITHUB_TOKEN" | docker login "ghcr.io" --username $CLOUD_MTA_BOT_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 14.21.1 ${MBT_VERSION} "ghcr.io/young-yang03" + + publish-to-dockerhub-java8-node16: + docker: + - image: cimg/go:1.17 + working_directory: ~/go/src/github.com/SAP/cloud-mta-build-tool + steps: + - checkout + - setup_remote_docker: + version: 20.10.6 + - run: + name: build image pre-setup + command: | + #Make sure HEAD points to master + git checkout master + git fetch + git rebase + - run: + name: build Java 8.1.091 & Node 16.18.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + sh $PWD/scripts/build_image 8.1.091 16.18.1 ${MBT_VERSION} + - run: + name: publish Java 8.1.091 & Node 16.18.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + echo "Image release: ${MBT_VERSION}" + #Push to Docker Hub + echo "$DOCKER_HUB_TOKEN" | docker login --username $DOCKER_HUB_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 16.18.1 ${MBT_VERSION} "cobra217" + #Push to GitHub Container Registry + echo "$CLOUD_MTA_BOT_GITHUB_TOKEN" | docker login "ghcr.io" --username $CLOUD_MTA_BOT_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 16.18.1 ${MBT_VERSION} "ghcr.io/young-yang03" + + publish-to-dockerhub-java8-node18: + docker: + - image: cimg/go:1.17 + working_directory: ~/go/src/github.com/SAP/cloud-mta-build-tool + steps: + - checkout + - setup_remote_docker: + version: 20.10.6 + - run: + name: build image pre-setup + command: | + #Make sure HEAD points to master + git checkout master + git fetch + git rebase + - run: + name: build Java 8.1.091 & Node 18.12.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + sh $PWD/scripts/build_image 8.1.091 18.12.1 ${MBT_VERSION} + - run: + name: publish Java 8.1.091 & Node 18.12.1 image + command: | + MBT_VERSION=$(cat ./VERSION) + echo "Image release: ${MBT_VERSION}" + #Push to Docker Hub + echo "$DOCKER_HUB_TOKEN" | docker login --username $DOCKER_HUB_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 18.12.1 ${MBT_VERSION} "cobra217" + #Push to GitHub Container Registry + echo "$CLOUD_MTA_BOT_GITHUB_TOKEN" | docker login "ghcr.io" --username $CLOUD_MTA_BOT_USER --password-stdin + sh $PWD/scripts/publish_image 8.1.091 18.12.1 ${MBT_VERSION} "ghcr.io/young-yang03" + publish-to-dockerhub-java11-node14: docker: - image: cimg/go:1.17 @@ -157,8 +253,8 @@ jobs: - run: name: build Java 11.0.17 & Node 14.21.1 image command: | - MBT_VERSION=$(cat ./VERSION) - sh $PWD/scripts/build_image 11.0.17 14.21.1 ${MBT_VERSION} + MBT_VERSION=$(cat ./VERSION) + sh $PWD/scripts/build_image 11.0.17 14.21.1 ${MBT_VERSION} - run: name: publish Java 11.0.17 & Node 14.21.1 image command: | @@ -553,6 +649,30 @@ workflows: only: /release/ branches: ignore: /.*/ + - publish-to-dockerhub-java8-node14: + requires: + - publish-to-npm + filters: + tags: + only: /release/ + branches: + ignore: /.*/ + - publish-to-dockerhub-java8-node16: + requires: + - publish-to-npm + filters: + tags: + only: /release/ + branches: + ignore: /.*/ + - publish-to-dockerhub-java8-node18: + requires: + - publish-to-npm + filters: + tags: + only: /release/ + branches: + ignore: /.*/ - publish-to-dockerhub-java11-node14: requires: - publish-to-npm @@ -627,6 +747,9 @@ workflows: ignore: /.*/ - remove-github-release-tag: requires: + - publish-to-dockerhub-java8-node14 + - publish-to-dockerhub-java8-node16 + - publish-to-dockerhub-java8-node18 - publish-to-dockerhub-java11-node14 - publish-to-dockerhub-java11-node16 - publish-to-dockerhub-java11-node18 diff --git a/Dockerfile_mbtci_template b/Dockerfile_mbtci_template index 70892f27..08a87c77 100644 --- a/Dockerfile_mbtci_template +++ b/Dockerfile_mbtci_template @@ -6,12 +6,13 @@ ARG MTA_USER_HOME="/home/${MTA_USER}" ARG MBT_VERSION=1.2.21 ARG GO_VERSION=1.19.3 ARG NODE_VERSION=NODE_VERSION_TEMPLATE -ARG MAVEN_VERSION=3.8.6 +ARG MAVEN_VERSION=3.8.7 ARG MAVEN_BASE_URL=https://downloads.apache.org/maven/maven-3/${MAVEN_VERSION}/binaries ARG SAPMACHINE_VERSION=JAVA_VERSION_TEMPLATE # Environment variables ENV PYTHON /usr/bin/python3 +ENV JAVA_HOME /opt/jdk ENV MAVEN_HOME /usr/share/maven ENV M2_HOME ${MAVEN_HOME} ENV PATH /usr/local/go/bin:$PATH @@ -72,12 +73,12 @@ RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys "$key" ; \ done \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-$ARCH.tar.xz" \ - && curl -fsSLO --compressed "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}-linux-${ARCH}.tar.xz" \ + && curl -fsSLO --compressed "https://nodejs.org/dist/v${NODE_VERSION}/SHASUMS256.txt.asc" \ && gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \ - && grep " node-v$NODE_VERSION-linux-$ARCH.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ - && tar -xJf "node-v$NODE_VERSION-linux-$ARCH.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ - && rm -rf "$GNUPGHOME" "node-v$NODE_VERSION-linux-$ARCH.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ + && grep " node-v${NODE_VERSION}-linux-${ARCH}.tar.xz\$" SHASUMS256.txt | sha256sum -c - \ + && tar -xJf "node-v${NODE_VERSION}-linux-${ARCH}.tar.xz" -C /usr/local --strip-components=1 --no-same-owner \ + && rm -rf "$GNUPGHOME" "node-v${NODE_VERSION}-linux-${ARCH}.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \ && apt-mark auto '.*' > /dev/null \ && find /usr/local -type f -executable -exec ldd '{}' ';' \ | awk '/=>/ { print $(NF-1) }' \ @@ -143,31 +144,59 @@ RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ && go version # Install SAPMachine -RUN ARCH= && dpkgArch="$(dpkg --print-architecture)" \ - && case "${dpkgArch##*-}" in \ +RUN sapmachine_install() { \ + SAPMACHINE_MAJOR_VERSION=$(echo ${SAPMACHINE_VERSION} | cut -d. -f1); \ + ARCH=; \ + dpkgArch="$(dpkg --print-architecture)"; \ + case "${dpkgArch##*-}" in \ amd64) ARCH='amd64';; \ *) echo "unsupported architecture"; exit 1 ;; \ - esac \ + esac; \ + apt-get update; \ + apt-get install -y ca-certificates gnupg dirmngr --no-install-recommends; \ + rm -rf /var/lib/apt/lists/*; \ + export GNUPGHOME="$(mktemp -d)"; \ + for key in \ + CACB9FE09150307D1D22D82962754C3B3ABCFE23 \ + ; do \ + gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/sapmachine.gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ + gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/sapmachine.gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys "$key" ; \ + done; \ + chmod 644 /etc/apt/trusted.gpg.d/sapmachine.gpg; \ + echo "deb http://dist.sapmachine.io/debian/${ARCH}/ ./" | tee /etc/apt/sources.list.d/sapmachine.list; \ + apt-get update; \ + apt-get install -y sapmachine-${SAPMACHINE_MAJOR_VERSION}-jdk=${SAPMACHINE_VERSION} --no-install-recommends; \ + rm -rf "$GNUPGHOME" /var/lib/apt/lists/*; \ + apt-get remove --purge --autoremove -y ca-certificates gnupg dirmngr; \ + ln -s /usr/lib/jvm/sapmachine-${SAPMACHINE_MAJOR_VERSION} ${JAVA_HOME}; \ + }; \ + sapjvm_install() { \ + ARCH=; \ + dpkgArch="$(dpkg --print-architecture)"; \ + case "${dpkgArch##*-}" in \ + amd64) ARCH='x64';; \ + ppc64el) ARCH='ppc64le';; \ + *) echo "unsupported architecture"; exit 1 ;; \ + esac; \ + apt-get update; \ + apt-get install -y ca-certificates curl libarchive-tools --no-install-recommends; \ + rm -rf /var/lib/apt/lists/*; \ + curl -fsSLO --compressed -b 'eula_3_1_agreed=tools.hana.ondemand.com/developer-license-3_1.txt' https://tools.hana.ondemand.com/additional/sapjvm-${SAPMACHINE_VERSION}-linux-${ARCH}.zip; \ + echo "583dedfeee0c119839a610ddc8c6768d0c044429 sapjvm-${SAPMACHINE_VERSION}-linux-${ARCH}.zip" | sha1sum -c -; \ + bsdtar -xvf sapjvm-${SAPMACHINE_VERSION}-linux-${ARCH}.zip -C /usr/local --strip-components=1 --no-same-owner; \ + rm -f sapjvm-${SAPMACHINE_VERSION}-linux-${ARCH}.zip; \ + apt-get remove --purge --auto-remove -y ca-certificates curl libarchive-tools; \ + ln -s /usr/local ${JAVA_HOME}; \ + } \ && set -ex \ - && apt-get update \ - && apt-get install -y ca-certificates gnupg dirmngr --no-install-recommends \ - && rm -rf /var/lib/apt/lists/* \ - && export GNUPGHOME="$(mktemp -d)" \ - && for key in \ - CACB9FE09150307D1D22D82962754C3B3ABCFE23 \ - ; do \ - gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/sapmachine.gpg --batch --keyserver hkps://keys.openpgp.org --recv-keys "$key" || \ - gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/sapmachine.gpg --batch --keyserver hkps://keyserver.ubuntu.com --recv-keys "$key" ; \ - done \ - && chmod 644 /etc/apt/trusted.gpg.d/sapmachine.gpg \ - && echo "deb http://dist.sapmachine.io/debian/${ARCH}/ ./" | tee /etc/apt/sources.list.d/sapmachine.list \ - && apt-get update \ - && apt-get install -y sapmachine-$(echo ${SAPMACHINE_VERSION} | cut -d. -f1)-jdk=${SAPMACHINE_VERSION} --no-install-recommends \ - && rm -rf "$GNUPGHOME" /var/lib/apt/lists/* \ - && apt-get remove --purge --autoremove -y ca-certificates gnupg dirmngr \ + && if [ $(echo ${SAPMACHINE_VERSION} | cut -d. -f1) -le 8 ]; then \ + sapjvm_install; \ + else \ + sapmachine_install; \ + fi \ # smoke test && echo "SAPMachine ${SAPMACHINE_VERSION} install smoke test!" \ - && java --version + && java -version # Install Maven RUN set -ex \ @@ -212,6 +241,13 @@ RUN set -ex \ && python2.7 --version \ && python3 --version -ENV PATH=$PATH:./node_modules/.bin HOME=${MTA_USER_HOME} +# Allow global npm packages install without sudo +RUN set -ex \ + && mkdir ${MTA_USER_HOME}/.npm-global \ + && mkdir ${MTA_USER_HOME}/.npm-global/lib \ + && chown -R ${MTA_USER}:${MTA_USER} ${MTA_USER_HOME} +ENV NPM_CONFIG_PREFIX ${MTA_USER_HOME}/.npm-global + +ENV PATH=$PATH:./node_modules/.bin:${MTA_USER_HOME}/.npm-global/bin WORKDIR /project USER ${MTA_USER} \ No newline at end of file diff --git a/cmd/testdata/mtahtml5/mta.sh b/cmd/testdata/mtahtml5/mta.sh index fdf3eead..e6466e02 100644 --- a/cmd/testdata/mtahtml5/mta.sh +++ b/cmd/testdata/mtahtml5/mta.sh @@ -16,7 +16,7 @@ # ----Executing build for module ui5app ------- # installing module dependencies & execute grunt & remove dev dependencies - (npm install && grunt && npm prune production ) & + (npm install && grunt && npm prune production) & # wait to the process to finish wait # Pack module after build for deployment diff --git a/integration/testdata/mtahtml5/mta.sh b/integration/testdata/mtahtml5/mta.sh index fdf3eead..e6466e02 100755 --- a/integration/testdata/mtahtml5/mta.sh +++ b/integration/testdata/mtahtml5/mta.sh @@ -16,7 +16,7 @@ # ----Executing build for module ui5app ------- # installing module dependencies & execute grunt & remove dev dependencies - (npm install && grunt && npm prune production ) & + (npm install && grunt && npm prune production) & # wait to the process to finish wait # Pack module after build for deployment diff --git a/scripts/build_image b/scripts/build_image index 405c6ea4..18db585f 100644 --- a/scripts/build_image +++ b/scripts/build_image @@ -19,7 +19,8 @@ echo "Build mbtci${JAVA_VERSION}${NODE_VERSION}:${MBT_VERSION}" docker build -t mbtci${JAVA_VERSION}${NODE_VERSION}:${MBT_VERSION} . # test image -if [ "$JAVA_MAJOR_VERSION" = "11" ] || [ "$JAVA_MAJOR_VERSION" = "17" ] || [ "$JAVA_MAJOR_VERSION" = "19" ]; then +if [ "$JAVA_MAJOR_VERSION" = "8" ] || [ "$JAVA_MAJOR_VERSION" = "11" ] || \ + [ "$JAVA_MAJOR_VERSION" = "17" ] || [ "$JAVA_MAJOR_VERSION" = "19" ]; then cp test/goss/goss_template.yaml test/goss/goss.yaml sed_i "s/NODE_VERSION_TEMPLATE/${NODE_VERSION_TEMPLATE}/" test/goss/goss.yaml sed_i "s/JAVA_VERSION_TEMPLATE/${JAVA_VERSION_TEMPLATE}/" test/goss/goss.yaml diff --git a/scripts/common_image b/scripts/common_image index 804616b7..3a5509b6 100644 --- a/scripts/common_image +++ b/scripts/common_image @@ -11,7 +11,7 @@ export NODE_MAJOR_VERSION="$(echo ${NODE_VERSION_TEMPLATE}|awk -F. '{printf "%d" echo "Java major version: ${JAVA_MAJOR_VERSION}, Node major version: ${NODE_MAJOR_VERSION}" -if ([ "$JAVA_MAJOR_VERSION" -ne "11" ] && [ "$JAVA_MAJOR_VERSION" -ne "17" ] && [ "$JAVA_MAJOR_VERSION" -ne "19" ]) || \ +if ([ "$JAVA_MAJOR_VERSION" -ne "8" ] && [ "$JAVA_MAJOR_VERSION" -ne "11" ] && [ "$JAVA_MAJOR_VERSION" -ne "17" ] && [ "$JAVA_MAJOR_VERSION" -ne "19" ]) || \ ([ "$NODE_MAJOR_VERSION" -ne "14" ] && [ "$NODE_MAJOR_VERSION" -ne "16" ] && [ "$NODE_MAJOR_VERSION" -ne "18" ]) then echo "Java: ${JAVA_MAJOR_VERSION}, Node: ${NODE_MAJOR_VERSION} combination is not supported!" diff --git a/test/goss/goss_template.yaml b/test/goss/goss_template.yaml index 1c214061..480f7e4d 100644 --- a/test/goss/goss_template.yaml +++ b/test/goss/goss_template.yaml @@ -9,8 +9,6 @@ package: installed: true python3: installed: true - make: - installed: true user: mta: exists: true @@ -41,6 +39,15 @@ command: exit-status: 0 stdout: - vNODE_VERSION_TEMPLATE + # verify installed UI5 + ui5 --version: + exit-status: 0 + # verify installed grunt + grunt --version: + exit-status: 0 + # verify installed go + go version: + exit-status:0 # verify NPM @sap-scope registry NOT configured npm config get @sap:registry: exit-status: 0 @@ -54,3 +61,9 @@ command: cd ~ && npm install @sap/cds: exit-status: 0 timeout: 50000 + cd ~ && npm install -g @sap/cds: + exit-status: 0 + timeout: 50000 + cd ~ && npm link @sap/cds --local: + exit-status: 0 + timeout: 50000