Merge pull request #783 from EMResearch/environment-actions #4471
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: [push] | |
env: | |
evomaster-version: 1.6.2 | |
# Unfortunately, to use JPackage we need JDK 17 or above :( | |
# Which is really bad due to the madness of --add-opens. | |
# Even if hunt down all cases of reflections in EM, there is still the problem of | |
# third-party libraries, which might do it only in special cases. | |
# For some "hilarious" case, see: | |
# https://github.com/EMResearch/EvoMaster/issues/447 | |
release-jdk: 17 | |
build-jdk: 1.8 | |
retention-days: 3 | |
# This build is quite expensive (1ish hour), so we run it whole only on 1 JVM version, and 1 OS. | |
# Recall that we also build on CircleCI, with different configurations. | |
# For the moment, we need to support JVM 8 and 11, with 17 when it comes out. | |
# EM should run an all OSs. As our main development machines are Windows and Mac, just | |
# testing whole build with all E2E only on Linux should be fine. | |
jobs: | |
base: | |
runs-on: ubuntu-latest | |
steps: | |
# Checkout code | |
- uses: actions/checkout@v2 | |
# Build/test for JDK | |
- name: Setup JDK ${{env.build-jdk}} | |
uses: actions/setup-java@v1 | |
with: | |
java-version: ${{env.build-jdk}} | |
- name: Cache Maven packages | |
uses: actions/cache@v2 | |
with: | |
path: ~/.m2 | |
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} | |
restore-keys: ${{ runner.os }}-m2 | |
- name: Build with Maven | |
run: mvn clean verify --fae | |
env: | |
CI_env: GithubAction | |
- name: Upload evomaster.jar | |
uses: actions/upload-artifact@v2 | |
with: | |
name: evomaster.jar | |
path: core/target/evomaster.jar | |
retention-days: ${{env.retention-days}} | |
if-no-files-found: error | |
# Make test report accessible from GitHub Actions (as Maven logs are long) | |
- name: Publish Test Report | |
if: success() || failure() | |
uses: mikepenz/action-junit-report@v3 | |
with: | |
report_paths: '**/target/surefire-reports/TEST-*.xml' | |
# Upload coverage results | |
- name: Upload coverage to CodeCov | |
run: curl -s https://codecov.io/bash | bash | |
# Only once coverage is uploaded, we try to build with other versions of Java, as "mvn clean" would delete those reports | |
# However, the latest LTS is fully built (with tests) on a different job | |
- name: Setup JDK 11 | |
uses: actions/setup-java@v1 | |
with: | |
java-version: 11 | |
- name: Compile with JDK 11 | |
run: mvn clean verify -DskipTests | |
latest-LTS: | |
# run on a different OS from main build. | |
# It would had been good, but does not work due to Docker support :( see: | |
# https://stackoverflow.com/questions/66077884/testcontainers-in-windows-environment-on-github-actions-could-not-find-a-valid | |
# TODO check this again in the future | |
# runs-on: windows-latest | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup JDK 17 | |
uses: actions/setup-java@v1 | |
with: | |
java-version: 17 | |
- name: Cache Maven packages | |
uses: actions/cache@v2 | |
with: | |
path: ~/.m2 | |
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }} | |
restore-keys: ${{ runner.os }}-m2 | |
- name: Build with Maven | |
run: mvn clean verify --fae | |
env: | |
CI_env: GithubAction | |
MAVEN_OPTS: "--add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED" | |
nodejs: | |
needs: base | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
# Build/test for JavaScript | |
- name: Use Node.js | |
uses: actions/setup-node@v1 | |
with: | |
node-version: 14.x | |
- run: npm ci | |
working-directory: ./client-js/evomaster-client-js | |
- run: npm run build | |
working-directory: ./client-js/evomaster-client-js | |
- run: npm run test | |
working-directory: ./client-js/evomaster-client-js | |
- run: npm ci | |
working-directory: ./client-js/integration-tests | |
- run: npm run build | |
working-directory: ./client-js/integration-tests | |
- run: npm run test | |
working-directory: ./client-js/integration-tests | |
- name: Setup JDK ${{env.build-jdk}} | |
uses: actions/setup-java@v1 | |
with: | |
java-version: ${{env.build-jdk}} | |
- name: Download fat jar | |
uses: actions/download-artifact@v2 | |
with: | |
name: evomaster.jar | |
path: core/target | |
### NOTE: we no longer run this, as NodeJS for backend no longer supported. | |
### This started to fail once introduced first version of "minimization", as JS driver would need | |
### to be updated with new features to support it | |
# E2E for JS. Must be run AFTER the JS and Core builds | |
# - name: E2E for JavaScript | |
# run: bash ./client-js/e2e-tests/e2e.sh | |
### TODO currently disabled, as it takes forever on CI (1-2 hours...), compared to few minutes on local machine. | |
### Need to find out why | |
# dotnet: | |
# needs: base | |
# runs-on: ubuntu-latest | |
# steps: | |
# - uses: actions/checkout@v2 | |
# # Build/test for .Net | |
# - name: Setup .NET Core | |
# uses: actions/setup-dotnet@v1 | |
# with: | |
# dotnet-version: 3.1.x | |
# - name: Clean .NET | |
# run: dotnet clean | |
# - name: Build with .NET | |
# run: dotnet build --configuration Release | |
# - name: Unit tests for .NET | |
# run: dotnet test | |
# - name: Setup JDK ${{env.build-jdk}} | |
# uses: actions/setup-java@v1 | |
# with: | |
# java-version: ${{env.build-jdk}} | |
# - name: Download fat jar | |
# uses: actions/download-artifact@v2 | |
# with: | |
# name: evomaster.jar | |
# path: core/target | |
# # E2E for C#. Must be run AFTER the C# and Core builds | |
# - name: E2E for C# | |
# run: bash ./e2e-tests/dotnet-rest/scripts/e2e.sh | |
installer-for-windows: | |
needs: base | |
runs-on: windows-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup JDK ${{env.release-jdk}} | |
uses: actions/setup-java@v1 | |
with: | |
java-version: ${{env.release-jdk}} | |
- name: Download fat jar | |
uses: actions/download-artifact@v2 | |
with: | |
name: evomaster.jar | |
path: core/target | |
- name: Build installation file | |
shell: bash | |
run: bash makeExecutable.sh WINDOWS | |
- name: Upload installation file | |
uses: actions/upload-artifact@v2 | |
with: | |
name: evomaster.msi | |
path: release/evomaster-${{env.evomaster-version}}.msi | |
retention-days: ${{env.retention-days}} | |
if-no-files-found: error | |
installer-for-osx: | |
needs: base | |
runs-on: macos-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup JDK ${{env.release-jdk}} | |
uses: actions/setup-java@v1 | |
with: | |
java-version: ${{env.release-jdk}} | |
- name: Download fat jar | |
uses: actions/download-artifact@v2 | |
with: | |
name: evomaster.jar | |
path: core/target | |
- name: Build installation file | |
shell: bash | |
run: bash makeExecutable.sh OSX | |
- name: Upload installation file | |
uses: actions/upload-artifact@v2 | |
with: | |
name: evomaster.dmg | |
path: release/evomaster-${{env.evomaster-version}}.dmg | |
retention-days: ${{env.retention-days}} | |
if-no-files-found: error | |
installer-for-debian: | |
needs: base | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- name: Setup JDK ${{env.release-jdk}} | |
uses: actions/setup-java@v1 | |
with: | |
java-version: ${{env.release-jdk}} | |
- name: Download fat jar | |
uses: actions/download-artifact@v2 | |
with: | |
name: evomaster.jar | |
path: core/target | |
- name: Build installation file | |
shell: bash | |
run: bash makeExecutable.sh DEBIAN | |
- name: Upload installation file | |
uses: actions/upload-artifact@v2 | |
with: | |
name: evomaster.deb | |
path: release/evomaster_${{env.evomaster-version}}-1_amd64.deb | |
retention-days: ${{env.retention-days}} | |
if-no-files-found: error | |