diff --git a/.dive-ci.yml b/.dive-ci.yml new file mode 100644 index 0000000..b70b867 --- /dev/null +++ b/.dive-ci.yml @@ -0,0 +1,13 @@ +rules: + # If the efficiency is measured below X%, mark as failed. + # Expressed as a ratio between 0-1. + lowestEfficiency: 0.95 + + # If the amount of wasted space is at least X or larger than X, mark as failed. + # Expressed in B, KB, MB, and GB. + highestWastedBytes: 20MB + + # If the amount of wasted space makes up for X% or more of the image, mark as failed. + # Note: the base image layer is NOT included in the total image size. + # Expressed as a ratio between 0-1; fails if the threshold is met or crossed. + highestUserWastedPercent: 0.20 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4595cc3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,31 @@ +* text eol=crlf +* text eol=lf + +*.zip filter=lfs diff=lfs merge=lfs -text +*.jar filter=lfs diff=lfs merge=lfs -text +*.tar.gz filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.tiff filter=lfs diff=lfs merge=lfs -text +*.ico filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +original filter=lfs diff=lfs merge=lfs -text +file filter=lfs diff=lfs merge=lfs -text +folderThumbnail filter=lfs diff=lfs merge=lfs -text +*.woff filter=lfs diff=lfs merge=lfs -text +*.woff2 filter=lfs diff=lfs merge=lfs -text +*.eot filter=lfs diff=lfs merge=lfs -text +*.ttf filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.flv filter=lfs diff=lfs merge=lfs -text +*.m4v filter=lfs diff=lfs merge=lfs -text +*.avi filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.pdf filter=lfs diff=lfs merge=lfs -text +*.3gp filter=lfs diff=lfs merge=lfs -text +*.ogv filter=lfs diff=lfs merge=lfs -text +*.webm filter=lfs diff=lfs merge=lfs -text +*.wdmg filter=lfs diff=lfs merge=lfs -text +*.svg filter=lfs diff=lfs merge=lfs -text +*.sftmp filter=lfs diff=lfs merge=lfs -text diff --git a/.github/workflows/anchore.yml b/.github/workflows/anchore.yml new file mode 100644 index 0000000..ccc61a3 --- /dev/null +++ b/.github/workflows/anchore.yml @@ -0,0 +1,57 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# This workflow checks out code, builds an image, performs a container image +# vulnerability scan with Anchore's Grype tool, and integrates the results with GitHub Advanced Security +# code scanning feature. For more information on the Anchore scan action usage +# and parameters, see https://github.com/anchore/scan-action. For more +# information on Anchore's container image scanning tool Grype, see +# https://github.com/anchore/grype +name: Anchore Container Scan + +on: + push: + branches: [ master ] + pull_request: + # The branches below must be a subset of the branches above + branches: [ master ] + schedule: + - cron: '40 17 * * 4' + +permissions: + contents: read + +jobs: + Anchore-Build-Scan: + permissions: + contents: read # for actions/checkout to fetch code + security-events: write # for github/codeql-action/upload-sarif to upload SARIF results + runs-on: ubuntu-latest + env: + SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + JDK_DRIVEID: ${{ secrets.JDK11_DRIVEID }} + steps: + - name: Checkout the code + uses: actions/checkout@v2 + + - name: Download Files from Google Drive + uses: docker://gvfn/gdrive + with: + entrypoint: "/bin/sh" + args: | + -c "\ + gdrive --config /gdrive --service-account-evar SERVICE_ACCOUNT_JSON download --path /github/workspace/packages/ ${JDK_DRIVEID} + + - name: Build the Docker image + run: docker build . --file Dockerfile --tag localbuild/testimage:latest + - name: Run the Anchore scan action itself with GitHub Advanced Security code scanning integration enabled + uses: anchore/scan-action@b08527d5ae7f7dc76f9621edb6e49eaf47933ccd + with: + image: "localbuild/testimage:latest" + acs-report-enable: true + - name: Upload Anchore Scan Report + uses: github/codeql-action/upload-sarif@v1 + with: + sarif_file: results.sarif diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..8c89081 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,107 @@ +name: build + +on: + push: + branches: + - '*' + +jobs: + build: + if: "!contains(github.event.head_commit.message, 'skip ci')" + runs-on: ubuntu-latest + env: + DOCKER_REGISTRY: docker.io + ORGANISATION_NAME: aemdesign + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + SERVICE_ACCOUNT_JSON: ${{ secrets.GOOGLE_SERVICE_ACCOUNT }} + JDK_DRIVEID: ${{ secrets.JDK_DRIVEID }} + + + steps: + + - uses: actions/checkout@v2 + - name: set envirnment variables + id: config + run: | + source <(curl -sL https://github.com/aem-design/aemdesign-docker/releases/latest/download/github_get_config.sh) + source <(curl -sL https://github.com/aem-design/aemdesign-docker/releases/latest/download/github_get_version.sh) + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Download Files from Google Drive + uses: docker://gvfn/gdrive + with: + entrypoint: "/bin/sh" + args: | + -c "\ + gdrive --config /gdrive --service-account-evar SERVICE_ACCOUNT_JSON download --path /github/workspace/packages/ ${JDK_DRIVEID} + + - name: Build and export to Docker + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64 + load: true + build-args: | + "FILE_NAME=jdk-8u321-linux-x64.tar.gz" + tags: | + ${{ env.IMAGE }}:${{ env.GIT_BRANCH }} + ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE }}:${{ env.GIT_BRANCH }} + + + - name: test docker image + run: | + cd test && bash ./run_tests.sh "ghcr.io/$GITHUB_REPOSITORY_OWNER/$IMAGE:$GIT_BRANCH" + + - name: Run docker image analysis + uses: yuichielectric/dive-action@0.0.4 + with: + image: ${{ env.IMAGE }}:${{ env.GIT_BRANCH }} + config-file: ${{ env.GITHUB_WORKSPACE }}/.dive-ci.yml + github-token: ${{ secrets.GITHUB_TOKEN }} + + + - name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64 + push: true + build-args: | + "JDK_DRIVEID=${{ env.JDK_DRIVEID }}" + tags: | + ${{ env.IMAGE }}:${{ env.GIT_BRANCH }} + ghcr.io/${{ github.repository_owner }}/${{ env.IMAGE }}:${{ env.GIT_BRANCH }} + + - name: Update Docker Hub Description + uses: peter-evans/dockerhub-description@v2 + continue-on-error: true + with: + username: ${{ env.DOCKER_USERNAME }} + password: ${{ env.DOCKER_PASSWORD }} + repository: peterevans/dockerhub-description + + + - uses: meeDamian/github-release@1.0 + if: github.ref == 'refs/heads/master' + with: + token: ${{ secrets.GITHUB_TOKEN }} + tag: ${{ env.GITHUB_TAG }} + name: ${{ env.GITHUB_TAG }} + body: ${{ env.GIT_RELEASE_NOTES }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..024d21b --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ + +# Ignore IDE and Operating System artifacts +.idea +.classpath +.metadata +.project +.settings +maven-eclipse.xml +*.iml +*.ipr +*.iws +.DS_Store +*.rpm + +target/ +logs/ +packages/ diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 2ba36fd..0000000 --- a/.travis.yml +++ /dev/null @@ -1,67 +0,0 @@ -language: java - -if: tag is blank - -services: - - 'docker' - -before_install: - - echo GET CONFIG FROM DOCKERFILE - - export IMAGE_NAME=$(grep imagename= Dockerfile | sed -e 's/.*imagename="\(.*\)".*/\1/') - - export TEST_COMMAND=$(grep test.command= Dockerfile | sed -e 's/.*test.command="\(.*\)".*/\1/') - - export TEST_COMMAND_VERIFY=$(grep test.command.verify= Dockerfile | sed -e 's/.*test.command.verify="\(.*\)".*/\1/') - - export IMAGE_VERSION=$(grep version= Dockerfile | sed -e 's/.*version="\(.*\)".*/\1/') - - export IMAGE="$ORGANISATION_NAME/$IMAGE_NAME" - - echo IMAGE_NAME=$IMAGE_NAME - - echo IMAGE_VERSION=$IMAGE_VERSION - - echo TEST_COMMAND=$TEST_COMMAND - - echo TEST_COMMAND_VERIFY=$TEST_COMMAND_VERIFY - - echo GET CONFIG FROM GIT - - export CURRENT_VERSION=$(git describe --tag --always --long | sed -e 's/\(.*\)-\(.*\)-.*/\1.\2/') - - declare -a CURRENT_VERSION_ARRAY="(${CURRENT_VERSION//./ })"; export SEMVER_MAJOR=${CURRENT_VERSION_ARRAY[0]}; export SEMVER_MINOR=${CURRENT_VERSION_ARRAY[1]}; export SEMVER_PATCH=${CURRENT_VERSION_ARRAY[2]}; export SEMVER_BUILD=${CURRENT_VERSION_ARRAY[-1]} - - export SEMVER_BUILD=$(( ${SEMVER_PATCH} + ${SEMVER_BUILD} )) - - echo SEMVER_MAJOR:${SEMVER_MAJOR} - - echo SEMVER_MINOR:${SEMVER_MINOR} - - echo SEMVER_BUILD:${SEMVER_BUILD} - - export SEMVER=${SEMVER_MAJOR}.${SEMVER_MINOR}.${SEMVER_BUILD} - - echo SEMVER:$SEMVER - - if [[ ${SEMVER_MAJOR} == "" ]]; then travis_terminate 1; fi - - export TRAVIS_TAG=$SEMVER - - echo TRAVIS_TAG:$TRAVIS_TAG - -#build and test -install: - - docker build --pull -t $IMAGE:$IMAGE_VERSION --build-arg ORACLE_USERNAME=${ORACLE_USERNAME} --build-arg ORACLE_PASSWORD=${ORACLE_PASSWORD} . - - export CONTAINER_COMMAND="docker run $IMAGE:$IMAGE_VERSION $TEST_COMMAND" - - echo CONTAINER_COMMAND=$CONTAINER_COMMAND - - export CONTAINER_OUTPUT=$(eval $CONTAINER_COMMAND) - - echo CONTAINER_OUTPUT=$CONTAINER_OUTPUT - - docker tag $IMAGE:$IMAGE_VERSION $IMAGE:$CONTAINER_OUTPUT - - if [[ ! ${CONTAINER_OUTPUT} =~ ${TEST_COMMAND_VERIFY} ]]; then travis_terminate 1; fi - - docker images - -#test -script: - - echo "LOGIN TO HUB.DOCKER" - - docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD - - echo "PUSH HUB.DOCKER" - - docker push $IMAGE:$IMAGE_VERSION - - docker push $IMAGE:$CONTAINER_OUTPUT - - if [[ $TRAVIS_BRANCH == "master" ]]; then docker tag $IMAGE:$IMAGE_VERSION $IMAGE:latest && docker push $IMAGE:latest; fi - - echo "UPDATE README IN HUB.DOCKER" - - if [[ $TRAVIS_BRANCH == "master" ]]; then docker run --rm -v $(pwd):/data/ aemdesign/dockerhub-description "$DOCKER_USERNAME" "$DOCKER_PASSWORD" "$IMAGE"; fi - -## Get the project version -before_deploy: - - if [[ $TRAVIS_BRANCH == "master" ]]; then git tag $TRAVIS_TAG; fi - -## Create release in GitHub -deploy: - provider: releases - tag_name: $TRAVIS_TAG - name: $TRAVIS_TAG - target_commitish: $TRAVIS_COMMIT - api_key: $GITHUB_TOKEN - skip_cleanup: true - on: - branch: master diff --git a/Dockerfile b/Dockerfile index 3862a72..7f53f00 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,36 +1,23 @@ -FROM aemdesign/centos-tini:latest +FROM aemdesign/tini:ubuntu-focal -MAINTAINER devops - -LABEL os="centos" \ +LABEL os="ubuntu focal" \ container.description="oracle jdk" \ - version="jdk11" \ + version="jdk8" \ + maintainer="devops " \ imagename="oracle-jdk" \ test.command=" java -version 2>&1 | grep 'java version' | sed -e 's/.*java version "\(.*\)".*/\1/'" \ - test.command.verify="11." + test.command.verify="1.8" +ARG FILE_NAME="jdk-8u321-linux-x64.tar.gz" -ARG JAVA_VERSION="11" -ARG JAVA_VERSION_TIMESTAMP="5066655" -ARG JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk${JAVA_VERSION}-downloads-${JAVA_VERSION_TIMESTAMP}.html" -ARG ORACLE_PASSWORD="xxx" -ARG ORACLE_USERNAME="devops.aemdesign@gmail.com" +ENV JAVA_HOME=/opt/jdk1.8.0_321/ -COPY oracle-download.sh . +ADD packages/${FILE_NAME} /opt/ -RUN chmod +x oracle-download.sh && \ - echo JAVA_DOWNLOAD_URL=$JAVA_DOWNLOAD_URL && \ - AUTO_JDKURLINFO=$(curl -LsN ${JAVA_DOWNLOAD_URL} | grep -m1 jdk\-${JAVA_VERSION}.*linux.*x64.*.rpm ) && \ - AUTO_JDKURL=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"filepath":"\(http.*.rpm\)".*/\1/g' ) && \ - echo AUTO_JDKURL=$AUTO_JDKURL && \ - AUTO_JDKSHA256=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"SHA256":"\(.*\)".*/\1/g' ) && \ - echo AUTO_JDKSHA256=$AUTO_JDKSHA256 && \ - AUTO_JDKFILE=$(echo ${AUTO_JDKURL} | sed 's,^[^ ]*/,,' ) && \ - echo AUTO_JDKFILE=$AUTO_JDKFILE && \ - echo ./oracle-download.sh --cookie=accept-securebackup-cookie --output=${AUTO_JDKFILE} --password=${ORACLE_PASSWORD} --username=${ORACLE_USERNAME} ${AUTO_JDKURL} && \ - echo $(./oracle-download.sh --cookie=accept-securebackup-cookie --output=${AUTO_JDKFILE} --password=${ORACLE_PASSWORD} --username=${ORACLE_USERNAME} ${AUTO_JDKURL}) && \ - echo "${AUTO_JDKSHA256} ${AUTO_JDKFILE}" >> CHECKSUM && \ - cat CHECKSUM && \ - sha256sum -c CHECKSUM && \ - rpm -Uvh $AUTO_JDKFILE && \ - rm -f $AUTO_JDKFILE CHECKSUM +RUN \ + echo "CONFIG JDK" && \ + export JAVA_HOME=${JAVA_HOME} && \ + update-alternatives --install /usr/bin/java java ${JAVA_HOME%*/}/bin/java 1 && \ + update-alternatives --install /usr/bin/javac javac ${JAVA_HOME%*/}/bin/javac 1 && \ + update-alternatives --config java && \ + rm -rf /opt/${FILE_NAME} diff --git a/README.md b/README.md index a118e79..2b562ea 100644 --- a/README.md +++ b/README.md @@ -1,84 +1,17 @@ -## CentOS 7 with Oracle JDK - -[![build_status](https://travis-ci.org/aem-design/oracle-jdk.svg?branch=master)](https://travis-ci.org/aem-design/oracle-jdk) -[![github license](https://img.shields.io/github/license/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) -[![github issues](https://img.shields.io/github/issues/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) -[![github last commit](https://img.shields.io/github/last-commit/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) -[![github repo size](https://img.shields.io/github/repo-size/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) -[![docker stars](https://img.shields.io/docker/stars/aemdesign/oracle-jdk)](https://hub.docker.com/r/aemdesign/oracle-jdk) -[![docker pulls](https://img.shields.io/docker/pulls/aemdesign/oracle-jdk)](https://hub.docker.com/r/aemdesign/oracle-jdk) +## Oracle JDK + +[![build](https://github.com/aem-design/docker-oracle-jdk/actions/workflows/build.yml/badge.svg?branch=jdk8-ubuntu)](https://github.com/aem-design/docker-oracle-jdk/actions/workflows/build.yml)[![github license](https://img.shields.io/github/license/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) +[![github issues](https://img.shields.io/github/issues/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) +[![github last commit](https://img.shields.io/github/last-commit/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) +[![github repo size](https://img.shields.io/github/repo-size/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) +[![docker stars](https://img.shields.io/docker/stars/aemdesign/oracle-jdk)](https://hub.docker.com/r/aemdesign/oracle-jdk) +[![docker pulls](https://img.shields.io/docker/pulls/aemdesign/oracle-jdk)](https://hub.docker.com/r/aemdesign/oracle-jdk) [![github release](https://img.shields.io/github/release/aem-design/oracle-jdk)](https://github.com/aem-design/oracle-jdk) -This is docker image based on [aemdesign/centos-tini](https://hub.docker.com/r/aemdesign/centos-tini/) with Oracle JDK added. +This is docker image based on [aemdesign/tini](https://hub.docker.com/r/aemdesign/tini/) with Oracle JDK added. ### Included Packages Following is the list of packages included * jdk - for java processes - -### Manual JDK Download Test - -Following script finds latest version of java package. - -JDK8 - -```bash -export JAVA_VERSION="8" && \ -export JAVA_VERSION_TIMESTAMP="2133151" && \ -export JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk${JAVA_VERSION}-downloads-${JAVA_VERSION_TIMESTAMP}.html" && \ -export AUTO_JDKURLINFO=$(curl -LsN ${JAVA_DOWNLOAD_URL} | grep -m1 jdk\-${JAVA_VERSION}.*linux.*x64.*.rpm ) && \ -echo AUTO_JDKURLINFO=$AUTO_JDKURLINFO && \ -AUTO_JDKURL=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"filepath":"\(http.*.rpm\)".*/\1/g' ) && \ -AUTO_JDKMD5=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"MD5":"\(.*\)",".*/\1/g' ) && \ -AUTO_JDKFILE=$(echo ${AUTO_JDKURL} | sed 's,^[^ ]*/,,' ) && \ -echo JAVA_VERSION_TIMESTAMP=$JAVA_VERSION_TIMESTAMP && \ -echo JAVA_DOWNLOAD_URL=$JAVA_DOWNLOAD_URL && \ -echo AUTO_JDKURL=$AUTO_JDKURL && \ -echo AUTO_JDKMD5=$AUTO_JDKMD5 && \ -echo AUTO_JDKFILE=$AUTO_JDKFILE -``` - -JDK11 - -```bash -export JAVA_VERSION="11" && \ -export JAVA_VERSION_TIMESTAMP="5066655" && \ -export JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk${JAVA_VERSION}-downloads-${JAVA_VERSION_TIMESTAMP}.html" && \ -export AUTO_JDKURLINFO=$(curl -LsN ${JAVA_DOWNLOAD_URL} | grep -m1 jdk\-${JAVA_VERSION}\.*linux\.*x64.*.rpm ) && \ -echo AUTO_JDKURLINFO=$AUTO_JDKURLINFO && \ -AUTO_JDKURL=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"filepath":"\(http.*.rpm\)".*/\1/g' ) && \ -AUTO_JDKSHA256=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"SHA256":"\(.*\)".*/\1/g' ) && \ -export AUTO_JDKFILE=$(echo ${AUTO_JDKURL} | sed 's,^[^ ]*/,,' ) && \ -echo JAVA_VERSION_TIMESTAMP=$JAVA_VERSION_TIMESTAMP && \ -echo JAVA_DOWNLOAD_URL=$JAVA_DOWNLOAD_URL && \ -echo AUTO_JDKURL=$AUTO_JDKURL && \ -echo AUTO_JDKSHA256=$AUTO_JDKSHA256 && \ -echo AUTO_JDKFILE=$AUTO_JDKFILE -``` - - -### Test - -Following is used to test if container version matches whats is expected. - - -Get build number for JDK8 - -```bash -export JAVA_VERSION="8" && \ -export JAVA_VERSION_TIMESTAMP="2133151" && \ -export JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk${JAVA_VERSION}-downloads-${JAVA_VERSION_TIMESTAMP}.html" && \ -export AUTO_JDKURLINFO=$(curl -LsN ${JAVA_DOWNLOAD_URL} | grep -m1 jdk\-${JAVA_VERSION}.*linux.*x64.*.rpm ) && \ -AUTO_JDKURL=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"filepath":"\(http.*.rpm\)".*/\1/g' ) && echo $AUTO_JDKURL | sed -e "s/.*jdk-${JAVA_VERSION}u\(.*\)[-_]linux.*/\1/g" -``` - -Get version number for JDK11 - -```bash -export JAVA_VERSION="11" && \ -export JAVA_VERSION_TIMESTAMP="5066655" && \ -export JAVA_DOWNLOAD_URL="http://www.oracle.com/technetwork/java/javase/downloads/jdk${JAVA_VERSION}-downloads-${JAVA_VERSION_TIMESTAMP}.html" && \ -export AUTO_JDKURLINFO=$(curl -LsN ${JAVA_DOWNLOAD_URL} | grep -m1 jdk\-${JAVA_VERSION}.*linux.*x64.*.rpm ) && \ -AUTO_JDKURL=$(echo ${AUTO_JDKURLINFO} | sed -e 's/.*"filepath":"\(http.*.rpm\)".*/\1/g' ) && echo $AUTO_JDKURL | sed -e "s/.*jdk-\(.*\)[-_]linux.*/\1/g" -``` diff --git a/build.ps1 b/build.ps1 new file mode 100644 index 0000000..43e8c8f --- /dev/null +++ b/build.ps1 @@ -0,0 +1,25 @@ +Param( + [string]$LOG_PATH = "${PWD}\logs", + [string]$LOG_PEFIX = "docker", + [string]$LOG_SUFFIX = ".log", + [string]$TAG = "jdk8", + [string]$FILE = "Dockerfile", + [string]$FUNCTIONS_URI = "https://github.com/aem-design/aemdesign-docker/releases/latest/download/functions.ps1", + [string]$COMMAND = "docker buildx build . -f .\${FILE} -t ${TAG}", + [string]$TEST = "docker run --rm -it -e CI=true -v /var/run/docker.sock:/var/run/docker.sock wagoodman/dive:latest ${TAG}" +) + +$SKIP_CONFIG = $true +$PARENT_PROJECT_PATH = "." + +. ([Scriptblock]::Create((([System.Text.Encoding]::ASCII).getString((Invoke-WebRequest -Uri "${FUNCTIONS_URI}").Content)))) + +printSectionBanner "Building Image" +printSectionLine ( $COMMAND -replace $env:JDK_DRIVEID, $( "*" * $env:JDK_DRIVEID.length ) ) "warn" + +Invoke-Expression -Command "$COMMAND" | Tee-Object -Append -FilePath "${LOG_FILE}" +Invoke-Expression -Command "$TEST" | Tee-Object -Append -FilePath "${LOG_FILE}" + + + + diff --git a/debug.ps1 b/debug.ps1 new file mode 100644 index 0000000..ca7e048 --- /dev/null +++ b/debug.ps1 @@ -0,0 +1,21 @@ +Param( + [string]$LOG_PATH = "${PWD}\logs", + [string]$LOG_PEFIX = "docker", + [string]$LOG_SUFFIX = ".log", + [string]$TAG = "jdk8", + [string]$FILE = "Dockerfile", + [string]$FUNCTIONS_URI = "https://github.com/aem-design/aemdesign-docker/releases/latest/download/functions.ps1", + [string]$COMMAND = "docker build . -f .\${FILE} -t ${TAG}" +) + +$SKIP_CONFIG = $true +$PARENT_PROJECT_PATH = "." + +. ([Scriptblock]::Create((([System.Text.Encoding]::ASCII).getString((Invoke-WebRequest -Uri "${FUNCTIONS_URI}").Content)))) + +printSectionBanner "Loading Debug Image" +printSectionLine "$COMMAND" "warn" + +$IMAGENAME=Select-String -path $FILE '.*imagename="(.*)".*' -AllMatches | Foreach-Object {$_.Matches} | Foreach-Object {$_.Groups[1].Value} + +docker run -it --rm -v ${PWD}:/build/source:rw aemdesign/java-buildpack bash --login diff --git a/lint.sh b/lint.sh deleted file mode 100755 index f9b129b..0000000 --- a/lint.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -travis lint .travis.yml diff --git a/oracle-download.sh b/oracle-download.sh deleted file mode 100755 index 299f018..0000000 --- a/oracle-download.sh +++ /dev/null @@ -1,221 +0,0 @@ -#!/usr/bin/env bash -set -e - -cmdname="${0##*/}" - -VERSION=0.0.4 - -echoto() { - # print to stderr or to stdout - out=$1 - shift 1 - - if ([ "${out}" -eq 2 ]); then - printf "$@" >&2 - else - # stdout can be silenced only - if [ "${QUIET}" -eq 0 ]; then - printf "$@" - fi - fi -} - -usage() { - OUTPUT=`cat < 0), otherwise to stdout - if ([ "$1" -gt 0 ]); then - echo "${OUTPUT}" >&2 - else - echo "${OUTPUT}" - fi - - exit $1 -} - -version() { - echo "oradown version: ${VERSION}" - exit 0 -} - -check_cmds_present() { - eval "curl --version >/dev/null 2>&1" - if [ $? -eq 127 ]; then - echo "ERROR: curl command not present! Please install it first." - exit 1 - fi - eval "xmllint --version >/dev/null 2>&1" - if [ $? -eq 127 ]; then - echo "ERROR: xmllint command not present! Please install it first." - exit 1 - fi -} - -user_agent() { - # from https://gist.github.com/kopiro/837213c14641ae82b860 - USER_AGENTS=( \ - 'Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1' \ - 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1' \ - 'Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1' \ - 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1' \ - 'Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1' \ - 'Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1' \ - 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13' \ - 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13' \ - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_2) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13' \ - 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.1 Safari/537.13' \ - 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3' \ - 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3' \ - 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.3 (KHTML, like Gecko) Chrome/19.0.1061.1 Safari/536.3' \ - ) - echo ${USER_AGENTS[$RANDOM % ${#USER_AGENTS[@]} ]} -} - -down() { - USER_AGENT=$(user_agent) - COOKIES_FILE=/tmp/oradown_COOKIES.txt - rm -f ${COOKIES_FILE} - - # fetch osso_login.jsp page and retrieve form parameters - form_data="$(curl -s -L -c ${COOKIES_FILE} -H "User-Agent: ${USER_AGENT}" ${URL})" - - declare -a form_fields=( - 'OAM_REQ' - 'request_id' - 'site2pstoretoken' - 'v' - ) - - declare data_string - - declare -i count - for f in ${form_fields[@]}; do - count=$((count+1)) - xpath="string(//form/input[@name='${f}']/@value)" - data_string+="${f}=$(echo ${form_data} | xmllint --html --xpath ${xpath} 2>/dev/null -)" - if [[ $count -lt ${#form_fields[@]} ]]; then - data_string+='&' - fi - done - - # use filename from the URL (if explicit one not present) - if [ -z "${OUTPUT_FILE}" ]; then - OUTPUT_FILE=${URL##*/} - fi - - # download file - curl -L -o ${OUTPUT_FILE} -b ${COOKIES_FILE} -c ${COOKIES_FILE} 'https://login.oracle.com/oam/server/sso/auth_cred_submit' \ - -H "Cookie: s_cc=true; oraclelicense=${COOKIE_ACCEPT_LICENSE};" \ - -H "User-Agent: ${USER_AGENT}" \ - --data-urlencode "ssousername=${ORCL_USER}" \ - --data-urlencode "password=${ORCL_PWD}" \ - -d "${data_string}" \ - --compressed - - rm -f ${COOKIES_FILE} -} - -# process arguments -while [ $# -gt 0 ] -do - case "$1" in - -C) - COOKIE_ACCEPT_LICENSE="$2" - if [ -z "${COOKIE_ACCEPT_LICENSE}" ]; then break; fi - shift 2 - ;; - --cookie=*) - COOKIE_ACCEPT_LICENSE="${1#*=}" - shift 1 - ;; - -H | --help) - usage 0 - ;; - -O) - OUTPUT_FILE="$2" - if [ -z "${OUTPUT_FILE}" ]; then break; fi - shift 2 - ;; - --output=*) - OUTPUT_FILE="${1#*=}" - shift 1 - ;; - -P) - ORCL_PWD="$2" - if [ -z "${ORCL_PWD}" ]; then break; fi - shift 2 - ;; - --password=*) - ORCL_PWD="${1#*=}" - shift 1 - ;; - -U) - ORCL_USER="$2" - if [ -z "${ORCL_USER}" ]; then break; fi - shift 2 - ;; - --username=*) - ORCL_USER="${1#*=}" - shift 1 - ;; - -V | --version) - version - ;; - *) - URL="$@" - break - ;; - esac -done - -if [ -z "${URL}" ]; then - echoto 2 "Error: URL is mandatory.\n" - usage 1 -fi - -if [ -z "${ORCL_USER}" ]; then - echoto 2 "Error: USERNAME is mandatory.\n" - usage 1 -fi - -if [ -z "${ORCL_PWD}" ]; then - echoto 2 "Enter password for ${ORCL_USER}: " - read -s ORCL_PWD - echoto 2 "\n" -fi - -if [ -z "${COOKIE_ACCEPT_LICENSE}" ]; then - echoto 2 "Error: LICENSE_COOKIE is mandatory.\n" - usage 1 -fi - -check_cmds_present -down \ No newline at end of file diff --git a/test/run_tests.sh b/test/run_tests.sh new file mode 100644 index 0000000..166236f --- /dev/null +++ b/test/run_tests.sh @@ -0,0 +1,116 @@ +#!/bin/bash +# +# The 'run' performs a simple test that verifies that STI image. +# The main focus is that the image prints out the base-usage properly. +# +# IMAGE_NAME specifies a name of the candidate image used for testing. +# The image has to be available before this script is executed. +# +IMAGE_NAME=${1:-aemdesign/oracle-jdk} +FLAG_DEBUG=${2:-true} +IP=$(which ip) +if [[ -z $IP ]]; then + LOCAL_IP="localhost" +else + LOCAL_IP=$($IP route | awk '/default/ { print $3 }') +fi + + + +#debug(message,type[error,info,warning],newlinesiffix) +function debug { + + local DEFAULT_COLOR_WARN="\033[0;31;93m" #light yellow + local DEFAULT_COLOR_ERROR="\033[0;31;91m" #light red + local DEFAULT_COLOR_INFO="\033[0;31;94m" #light blue + local DEFAULT_COLOR_DEFAULT="\033[0;31;92m" #light green + local DEFAULT_COLOR_RESET="\033[0m" #light green + + COLOR_WARN="${COLOR_WARN:-$DEFAULT_COLOR_WARN}" #light yellow + COLOR_ERROR="${COLOR_ERROR:-$DEFAULT_COLOR_ERROR}" #light red + COLOR_INFO="${COLOR_INFO:-$DEFAULT_COLOR_INFO}" #light blue + COLOR_DEFAULT="${COLOR_DEFAULT:-$DEFAULT_COLOR_DEFAULT}" #light green + COLOR_RESET="${COLOR_RESET:-$DEFAULT_COLOR_RESET}" #light green + + LABEL_WARN="${LABEL_WARN:-*WARN*}" + LABEL_ERROR="${LABEL_ERROR:-*ERROR*}" + LABEL_INFO="${LABEL_INFO:-*INFO*}" + LABEL_DEFAULT="${LABEL_DEFAULT:-}" + + + COLOR_START="$COLOR_DEFAULT" + COLOR_END="$COLOR_RESET" + + local TEXT="${1:-}" + local TYPE="${2:-}" + local LABEL_TEXT="" + local TEXT_SUFFUX="" + local NEWLINESUFFUX=$3 + + if [ ! "$NEWLINESUFFUX" == "" ]; then + TEXT_SUFFUX="$NEWLINESUFFUX" + fi + + case $TYPE in + ("error") COLOR_START="$COLOR_ERROR" LABEL_TEXT="$LABEL_ERROR " COLOR_END="$COLOR_END";; + ("info") COLOR_START="$COLOR_INFO" LABEL_TEXT="$LABEL_INFO ";; + ("warn") COLOR_START="$COLOR_WARN" LABEL_TEXT="$LABEL_WARN ";; + esac + + + if [ "$FLAG_DEBUG" == "true" ]; then + + local LABEL="" + if [ "$FLAG_DEBUG_LABEL" == "true" ]; then + LABEL=${LABEL_TEXT:-} + fi + + TEXT="${TEXT//#d:/$COLOR_DEFAULT}" + TEXT="${TEXT//#w:/$COLOR_WARN}" + TEXT="${TEXT//#e:/$COLOR_ERROR}" + TEXT="${TEXT//#i:/$COLOR_INFO}" + TEXT="${TEXT//#r:/$COLOR_INFO}" + + echo -e "$COLOR_START$LABEL$TEXT$TEXT_SUFFUX$COLOR_END" +# printf "$COLOR_START%s%s$COLOR_END$TEXT_SUFFUX" "$LABEL" "$TEXT" + fi +} + + +printTitle() { + echo -n ${1:-Test} +} +printLine() { + echo ${1:-Test} +} +printResult() { + debug "${1:-fail}" "${1:-fail}" +} +printDebug() { + debug "$(printf '*%.0s' {1..100})" "error" + echo ${1:-Test Failed} + echo "${2:-No Output}" + debug "$(printf '*%.0s' {1..100})" "error" +} + + +test_usage_java() { + printLine "Testing java" + CHECK="$(cat ../Dockerfile | grep -m1 test.command.verify | sed -e 's/.*test.command.verify="\(.*\)".*/\1/g')" + CHECK_COMMAND="$(cat ../Dockerfile | grep -m1 test.command | sed -e 's/.*test.command="\(.*\)".*/\1/g')" + + printLine "Starting Container" + + OUTPUT=$(docker run --rm ${IMAGE_NAME} bash -c "${CHECK_COMMAND}") + + if [[ "$OUTPUT" != *"$CHECK"* ]]; then + printResult "error" + printDebug "Image '${IMAGE_NAME}' test FAILED could not find ${CHECK} in output" "${OUTPUT}" + exit 1 + else + printResult "success" + fi +} + + +test_usage_java