From 3bfe8f8b914386af0fc0844061c95126ac1b97d6 Mon Sep 17 00:00:00 2001 From: Damien Jeandemange Date: Mon, 16 Dec 2024 11:08:36 +0100 Subject: [PATCH] Create snapshot CI Signed-off-by: Damien Jeandemange --- .github/scripts/check_integration_branch.sh | 17 +++ .github/workflows/snapshot-ci.yml | 120 ++++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 .github/scripts/check_integration_branch.sh create mode 100644 .github/workflows/snapshot-ci.yml diff --git a/.github/scripts/check_integration_branch.sh b/.github/scripts/check_integration_branch.sh new file mode 100644 index 0000000..0ffd0c9 --- /dev/null +++ b/.github/scripts/check_integration_branch.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +repo=$1 +core_version=$2 + +# Add "-SNAPSHOT" to powsybl-core version if not already there +core_snapshot_version=$(echo "$core_version" | grep -q SNAPSHOT && echo "$core_version" || echo "$core_version-SNAPSHOT") + +# Find if an integration branch exists +INTEGRATION_BRANCH=$(git ls-remote --heads "$repo" | grep -E "refs/heads/integration/powsyblcore-$core_snapshot_version" | sed 's/.*refs\/heads\///') +if [ -n "$INTEGRATION_BRANCH" ]; then + echo "SNAPSHOT VERSION EXIST: $INTEGRATION_BRANCH" + echo "INTEGRATION_BRANCH=$INTEGRATION_BRANCH" >> "$GITHUB_ENV" +else + echo "No SNAPSHOT branch found" + echo "INTEGRATION_BRANCH=main" >> "$GITHUB_ENV" +fi diff --git a/.github/workflows/snapshot-ci.yml b/.github/workflows/snapshot-ci.yml new file mode 100644 index 0000000..1045ffc --- /dev/null +++ b/.github/workflows/snapshot-ci.yml @@ -0,0 +1,120 @@ +name: Snapshot CI + +on: + workflow_dispatch: + schedule: + - cron: '30 3 * * *' + +jobs: + build: + name: Build OS ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] # macos-latest : Knitro does not yet support Java API on macOS, to be tried later on + + steps: + - name: Install Knitro (Linux) + if: matrix.os == 'ubuntu-latest' + run: | + wget -nv -O knitro.tar.gz --user "$KNITRO_DOWNLOAD_USER" --password "$KNITRO_DOWNLOAD_PASSWORD" "$KNITRO_LINUX_URL" + mkdir -p $RUNNER_TEMP/knitro + tar xzf knitro.tar.gz -C $RUNNER_TEMP/knitro + echo "KNITRODIR=$RUNNER_TEMP/knitro/knitro-14.1.0-Linux64" >> "$GITHUB_ENV" + env: + KNITRO_DOWNLOAD_USER: ${{ secrets.KNITRO_DOWNLOAD_USER }} + KNITRO_DOWNLOAD_PASSWORD: ${{ secrets.KNITRO_DOWNLOAD_PASSWORD }} + KNITRO_LINUX_URL: ${{ secrets.KNITRO_LINUX_URL }} + + - name: Install Knitro (Windows) + if: matrix.os == 'windows-latest' + shell: powershell + run: | + C:\msys64\usr\bin\wget.exe -nv -O knitro.zip --user "$env:KNITRO_DOWNLOAD_USER" --password "$env:KNITRO_DOWNLOAD_PASSWORD" "$env:KNITRO_WINDOWS_URL" + 7z x -y knitro.zip -oC:\knitro + echo "KNITRODIR=C:\knitro\knitro-14.1.0-Win64" >> "$env:GITHUB_ENV" + env: + KNITRO_DOWNLOAD_USER: ${{ secrets.KNITRO_DOWNLOAD_USER }} + KNITRO_DOWNLOAD_PASSWORD: ${{ secrets.KNITRO_DOWNLOAD_PASSWORD }} + KNITRO_WINDOWS_URL: ${{ secrets.KNITRO_WINDOWS_URL }} + + # Define script path variable + - name: Set up script path + run: | + SCRIPTS_PATH="${GITHUB_WORKSPACE}/scripts/.github/workflows/scripts" + if [[ "${{ matrix.os }}" == "windows-latest" ]]; then + SCRIPTS_PATH=$(echo "$SCRIPTS_PATH" | sed 's/\\/\//g') + fi + echo "SCRIPTS_PATH=$SCRIPTS_PATH" >> $GITHUB_ENV + + # Build powsybl-core on main branch + - name: Checkout core sources + uses: actions/checkout@v4 + with: + repository: powsybl/powsybl-core + ref: main + path: powsybl-core + + - name: Build powsybl-core + run: | + mvn -batch-mode --no-transfer-progress clean install -DskipTests + echo "CORE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV + working-directory: ./powsybl-core + + # Checkout script + # The script check_integration_branch.sh is located in the workflow folder of the repository + # It is necessary for checking out the integration branch if it exists + - name: Checkout script + uses: actions/checkout@v4 + with: + sparse-checkout: | + .github + sparse-checkout-cone-mode: false + path: scripts + + # Build powsybl-open-loadflow snapshot + - name: Checking for open-loadflow snapshot branch + run : ${{ env.SCRIPTS_PATH }}/check_snapshot_branch.sh "https://github.com/powsybl/powsybl-open-loadflow.git" ${{ env.CORE_VERSION }} + - name: Checkout open-loadflow sources + uses: actions/checkout@v4 + with: + repository: powsybl/powsybl-open-loadflow + ref: ${{ env.SNAPSHOT_BRANCH }} + path: powsybl-open-loadflow + - name: Build open-loadflow snapshot + run: | + mvn versions:set-property -Dproperty=powsybl-core.version -DnewVersion=${{ env.CORE_VERSION}} -DgenerateBackupPoms=false + mvn -batch-mode --no-transfer-progress clean install -DskipTests + echo "LOADFLOW_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV + working-directory: ./powsybl-open-loadflow + + - name: Checkout sources + uses: actions/checkout@v4 + + - name: update pom.xml with snapshot versions + run: | + mvn versions:set-property -Dproperty=powsybl-core.version -DnewVersion=$CORE_VERSION -DgenerateBackupPoms=false + mvn versions:set-property -Dproperty=powsybl-open-loadflow.version -DnewVersion=$LOADFLOW_VERSION -DgenerateBackupPoms=false + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: Build with Maven (Ubuntu) + if: matrix.os != 'windows-latest' + run: | + ./mvnw install:install-file -Dfile="$KNITRODIR/examples/Java/lib/Knitro-Interfaces-2.5-KN_14.1.0.jar" -DgroupId=com.artelys -DartifactId=knitro-interfaces -Dversion=14.1.0 -Dpackaging=jar -DgeneratePom=true + ./mvnw --batch-mode -Pjacoco install + env: + ARTELYS_LICENSE: ${{ secrets.ARTELYS_LICENSE }} + + - name: Build with Maven (Windows) + if: matrix.os == 'windows-latest' + run: | + call mvnw.cmd install:install-file -Dfile="%KNITRODIR%\examples\Java\lib\Knitro-Interfaces-2.5-KN_14.1.0.jar" -DgroupId=com.artelys -DartifactId=knitro-interfaces -Dversion=14.1.0 -Dpackaging=jar -DgeneratePom=true + mvnw.cmd --batch-mode install + shell: cmd + env: + ARTELYS_LICENSE: ${{ secrets.ARTELYS_LICENSE }}