Skip to content

Merge pull request #783 from EMResearch/environment-actions #4471

Merge pull request #783 from EMResearch/environment-actions

Merge pull request #783 from EMResearch/environment-actions #4471

Workflow file for this run

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