Skip to content

Merge branch 'clean-wm' into issue-wm-e2e #5770

Merge branch 'clean-wm' into issue-wm-e2e

Merge branch 'clean-wm' into issue-wm-e2e #5770

Workflow file for this run

name: CI
on:
push:
branches:
- "**"
tags-ignore:
- '**'
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushpull_requestpull_request_targetpathspaths-ignore
# Avoid building if only modifying non-code files.
# An exception is docs/options.md , as created from build
paths:
- "**"
- '!scripts/**'
- '!version.py'
- '!makeExecutable.sh'
- '!buildAll.sh'
- '!README.md'
- '!LICENSE'
- '!.gitignore'
- '!docs/**'
- '!release_notes.md'
- 'docs/options.md'
### Unfortunately, had to disable this. Originally added to be able to run CI from PRs from forks (eg from external people).
### But this leads to run CI 2 twice on each push on an open PR, regardless of fork.
### It seems there is no solution for this:
### https://github.com/orgs/community/discussions/26276
# pull_request:
# branches:
# - "**"
env:
evomaster-version: 3.0.1
# 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
latest-jdk: 17
build-jdk: 1.8
retention-days: 5
# This build is quite expensive (some hours), so we run it whole only on some JVM versions and OSs.
# For the moment, we need to support JVM 8 and all following LTS versions (e.g, 11 and 17).
# 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:
full-build-base:
runs-on: ubuntu-latest
steps:
# Checkout code
- uses: actions/checkout@v4
# 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@v3
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@v3
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@v4
with:
report_paths: '**/target/surefire-reports/TEST-*.xml'
# Upload coverage results
# As of 2024, looks like a rate limiter is breaking the build.
# As such, now we only upload from master branch, hoping it is enough.
# If not, might have to remove this
- if: github.ref == 'refs/heads/master'
name: Upload coverage to CodeCov
run: curl -s https://codecov.io/bash | bash
- if: github.ref != 'refs/heads/master'
name: Uploading coverage to CodeCov is done only on 'master' branch builds
run: echo Skipping upload to CodeCov
# 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
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Compile with JDK 17
run: mvn clean verify -DskipTests
base-build-mac:
runs-on: macos-latest
steps:
- uses: actions/checkout@v4
- name: Setup JDK ${{env.latest-jdk}}
uses: actions/setup-java@v1
with:
java-version: ${{env.latest-jdk}}
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn clean verify -DskipTests
env:
CI_env: GithubAction
base-build-windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- name: Setup JDK ${{env.latest-jdk}}
uses: actions/setup-java@v1
with:
java-version: ${{env.latest-jdk}}
- name: Cache Maven packages
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: Build with Maven
run: mvn clean verify -DskipTests
env:
CI_env: GithubAction
full-build-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@v4
- name: Setup JDK ${{env.latest-jdk}}
uses: actions/setup-java@v1
with:
java-version: ${{env.latest-jdk}}
- name: Cache Maven packages
uses: actions/cache@v3
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: full-build-base
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# 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@v3
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: full-build-base
runs-on: windows-latest
steps:
- uses: actions/checkout@v4
- 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@v3
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@v3
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: full-build-base
runs-on: macos-latest
steps:
- uses: actions/checkout@v3
- 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@v3
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@v3
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: full-build-base
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- 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@v3
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@v3
with:
name: evomaster.deb
path: release/evomaster_${{env.evomaster-version}}-1_amd64.deb
retention-days: ${{env.retention-days}}
if-no-files-found: error