diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..d1c729d765 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,31 @@ +# Include any files or directories that you don't want to be copied to your +# container here (e.g., local build artifacts, temporary files, etc.). +# +# For more help, visit the .dockerignore file reference guide at +# https://docs.docker.com/go/build-context-dockerignore/ + +**/.DS_Store +**/__pycache__ +**/.venv +**/.classpath +**/.dockerignore +**/.project +**/.settings +**/.toolstarget +**/.vs +**/.vscode +**/*.*proj.user +**/*.dbmdl +**/*.jfm +**/bin +**/charts +**/docker-compose* +**/compose* +**/Dockerfile* +**/node_modules +**/npm-debug.log +**/obj +**/secrets.dev.yaml +**/values.dev.yaml +LICENSE +README.md diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000000..d8f75a8f7b --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,49 @@ +name: Builds Docker Images + +on: + push: + branches-ignore: + - gh-pages + pull_request: + branches-ignore: + - gh-pages + +env: + OUTDIR: "out" + +jobs: + build-test-containers: + strategy: + fail-fast: false + matrix: + include: + - dockerfile: ./docker/Dockerfile.ubuntu2004 + tag: asdfghjklxd/reposense-docker-test:ubuntu-20-04 + os: Ubuntu 20.04 + - dockerfile: ./docker/Dockerfile.ubuntu2204 + tag: asdfghjklxd/reposense-docker-test:ubuntu-22-04 + os: Ubuntu 22.04 + name: ${{ matrix.os }} (Java 8, 11) + runs-on: ubuntu-latest + steps: + - name: Checkout V4 + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Build Docker Image + run: | + docker build -t ${{ matrix.tag }} -f ${{ matrix.dockerfile }} -o ${{ env.OUTDIR }} . + # - name: Upload Code Coverage (Java 8) + # if: ${{ success() }} + # uses: codecov/codecov-action@v3 + # with: + # directory: ${{ github.workspace }}/${{ env.OUTDIR }}/reports/java8 + # files: coverage.xml + # fail_ci_if_error: true + # - name: Upload Code Coverage (Java 11) + # if: ${{ success() }} + # uses: codecov/codecov-action@v3 + # with: + # directory: ${{ github.workspace }}/${{ env.OUTDIR }}/reports/java11 + # files: coverage.xml + # fail_ci_if_error: true diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000000..061b59e22d --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,32 @@ +version: "3" +services: + RepoSense-Ubuntu-20.04: + container_name: RepoSense-Ubuntu-20.04 + build: + dockerfile: docker/Dockerfile.ubuntu2004 + image: reposense-ubuntu-20.04:latest + RepoSense-Ubuntu-22.04: + container_name: RepoSense-Ubuntu-22.04 + build: + dockerfile: docker/Dockerfile.ubuntu2204 + image: reposense-ubuntu-22.04:latest +# RepoSense-Windows-Server-2019: +# container_name: RepoSense-Windows-Server-2019 +# build: +# dockerfile: docker/Dockerfile.windows2019 +# image: reposense-windows-server-2019:latest +# RepoSense-Windows-Server-2022: +# container_name: RepoSense-Windows-Server-2022 +# build: +# dockerfile: docker/Dockerfile.windows2022 +# image: reposense-windows-server-2022:latest +# RepoSense-MacOS-Big-Sur: +# container_name: RepoSense-MacOS-Big-Sur +# build: +# dockerfile: docker/Dockerfile.macos-big-sur +# image: reposense-macos:latest +# RepoSense-MacOS-Monterey: +# container_name: RepoSense-MacOS-Monterey +# build: +# dockerfile: docker/Dockerfile.macos-monterey +# image: reposense-macos:latest diff --git a/docker/Dockerfile.ubuntu2004 b/docker/Dockerfile.ubuntu2004 new file mode 100644 index 0000000000..a2116e4ea8 --- /dev/null +++ b/docker/Dockerfile.ubuntu2004 @@ -0,0 +1,75 @@ +#!/usr/bin/docker +# ██████ ███████ ██████ ██████ ███████ ███████ ███ ██ ███████ ███████ +# ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ +# ██████ █████ ██████ ██ ██ ███████ █████ ██ ██ ██ ███████ █████ +# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +# ██ ██ ███████ ██ ██████ ███████ ███████ ██ ████ ███████ ███████ +# +# Title: Ubuntu LTS 20.04 Builds +# Author: George Tay +# Version: 0.1 +# License: MIT (see main repository for Licensing information +# +# Dockerfile format inspired by https://github.com/sickcodes/Docker-OSX/blob/master/Dockerfile.naked +# +# These are some of the resources which I heavily referenced to create this Dockerfile: +# - Passing Arguments into Docker Containers +# - https://stackoverflow.com/questions/40873165/use-docker-run-command-to-pass-arguments-to-cmd-in-dockerfile +# - Installation of Java on Ubuntu +# - https://stackoverflow.com/questions/49914574/install-jdk-8-update-172-in-dockerfile-with-ubuntu-image +# - Installation of NodeJS via Node Version Manager (NVM) +# - https://stackoverflow.com/questions/36399848/install-node-in-dockerfile + +FROM asdfghjklxd/reposense-images:ubuntu-20-04 AS setup-env + +LABEL os=ubuntu +LABEL "os.version"="20.04" +LABEL java="8, 11" +LABEL node="16.20.2" +LABEL maintainer="George Tay" + +WORKDIR /RepoSense + +# copy over all files +COPY . . + +# allow gradlew to be executable +RUN chmod +x gradlew + +# make the report directory +RUN mkdir reports + +# test java 8 +RUN export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 && \ + update-java-alternatives --set /usr/lib/jvm/java-1.8.0-openjdk-amd64; +RUN ./gradlew environmentalChecks +RUN ./gradlew lintFrontend +RUN ./gradlew clean +RUN ./gradlew test +RUN ./gradlew systemTest +RUN ./gradlew checkstyleAll +# RUN ./gradlew clean +# RUN ./gradlew frontendTest -Pci +RUN ./gradlew coverage +RUN cp -rf ./build/reports/jacoco/coverage reports/ +RUN mv -f reports/coverage reports/java8 + +# test java 11 +RUN export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 && \ + update-java-alternatives --set /usr/lib/jvm/java-1.11.0-openjdk-amd64; +RUN ./gradlew clean +RUN ./gradlew environmentalChecks +RUN ./gradlew lintFrontend +RUN ./gradlew clean +RUN ./gradlew test +RUN ./gradlew systemTest +RUN ./gradlew checkstyleAll +# RUN ./gradlew clean +# RUN ./gradlew frontendTest -Pci +RUN ./gradlew coverage +RUN cp -rf ./build/reports/jacoco/coverage reports/ +RUN mv -f reports/coverage reports/java11 + +# export reports +FROM scratch AS report-exporter +COPY --from=setup-env RepoSense/reports /reports diff --git a/docker/Dockerfile.ubuntu2204 b/docker/Dockerfile.ubuntu2204 new file mode 100644 index 0000000000..8a577b6337 --- /dev/null +++ b/docker/Dockerfile.ubuntu2204 @@ -0,0 +1,74 @@ +#!/usr/bin/docker +# ██████ ███████ ██████ ██████ ███████ ███████ ███ ██ ███████ ███████ +# ██ ██ ██ ██ ██ ██ ██ ██ ██ ████ ██ ██ ██ +# ██████ █████ ██████ ██ ██ ███████ █████ ██ ██ ██ ███████ █████ +# ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ ██ +# ██ ██ ███████ ██ ██████ ███████ ███████ ██ ████ ███████ ███████ +# +# Title: Ubuntu LTS 22.04 Builds +# Author: George Tay +# Version: 0.1 +# License: MIT (see main repository for Licensing information +# +# Dockerfile format inspired by https://github.com/sickcodes/Docker-OSX/blob/master/Dockerfile.naked +# +# These are some of the resources which I heavily referenced to create this Dockerfile: +# - Passing Arguments into Docker Containers +# - https://stackoverflow.com/questions/40873165/use-docker-run-command-to-pass-arguments-to-cmd-in-dockerfile +# - Installation of Java on Ubuntu +# - https://stackoverflow.com/questions/49914574/install-jdk-8-update-172-in-dockerfile-with-ubuntu-image +# - Installation of NodeJS via Node Version Manager (NVM) +# - https://stackoverflow.com/questions/36399848/install-node-in-dockerfile + +FROM asdfghjklxd/reposense-images:ubuntu-22-04 AS setup-env + +LABEL os=ubuntu +LABEL "os.version"="20.04" +LABEL java="8, 11" +LABEL node="16.20.2" +LABEL maintainer="George Tay" + +WORKDIR /RepoSense + +# copy over all files +COPY . . + +# allow gradlew to be executable +RUN chmod +x gradlew + +# make the report directory +RUN mkdir reports + +# test java 8 +RUN export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 && \ + update-java-alternatives --set /usr/lib/jvm/java-1.8.0-openjdk-amd64; +RUN ./gradlew environmentalChecks +RUN ./gradlew lintFrontend +RUN ./gradlew clean +RUN ./gradlew test +RUN ./gradlew systemTest +RUN ./gradlew checkstyleAll +# RUN ./gradlew clean +# RUN ./gradlew frontendTest -Pci +RUN ./gradlew coverage +RUN cp -rf ./build/reports/jacoco/coverage reports/ +RUN mv -f reports/coverage reports/java8 + +# test java 11 +RUN export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64 && \ + update-java-alternatives --set /usr/lib/jvm/java-1.11.0-openjdk-amd64; +RUN ./gradlew environmentalChecks +RUN ./gradlew lintFrontend +RUN ./gradlew clean +RUN ./gradlew test +RUN ./gradlew systemTest +RUN ./gradlew checkstyleAll +# RUN ./gradlew clean +# RUN ./gradlew frontendTest -Pci +RUN ./gradlew coverage +RUN cp -rf ./build/reports/jacoco/coverage reports/ +RUN mv -f reports/coverage reports/java + +# export reports +FROM scratch AS report-exporter +COPY --from=setup-env RepoSense/reports /reports