From 007d3ac7f1055d2a816ea661c0cf66abc600c38a Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Wed, 11 Feb 2026 22:56:08 +0100 Subject: [PATCH 01/14] Add initial CI --- .github/workflows/check.yml | 23 +++++++++++++++++++++++ .gitignore | 5 ++++- gradlew | 0 test/mslinks/ReadTests.java | 4 ++++ test/mslinks/WriteTests.java | 11 +++++++++++ 5 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/check.yml mode change 100644 => 100755 gradlew diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..bc33d16 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,23 @@ +name: Check + +on: + push: + branches: [ main, master ] + pull_request: + branches: [ main, master ] + +jobs: + build: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v6 + + - name: Set up JDK + uses: actions/setup-java@v5 + with: + java-version: '11' + distribution: 'temurin' + + - name: Run checks with Gradle + run: ./gradlew check diff --git a/.gitignore b/.gitignore index fb5dbcf..d113a89 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,7 @@ bin/ build/ *.pdf -.* \ No newline at end of file + +.gradle +.idea/ +.vscode/ diff --git a/gradlew b/gradlew old mode 100644 new mode 100755 diff --git a/test/mslinks/ReadTests.java b/test/mslinks/ReadTests.java index 19b6934..4348b83 100644 --- a/test/mslinks/ReadTests.java +++ b/test/mslinks/ReadTests.java @@ -14,6 +14,7 @@ */ package mslinks; +import org.junit.Assume; import org.junit.Test; import io.ByteReader; @@ -56,6 +57,9 @@ public void TestLinkProperties() throws IOException, ShellLinkException { @Test public void TestLinkHeaderProperties() throws IOException, ShellLinkException { + // skip on CI, because time zone offsets cause issues + Assume.assumeTrue(System.getenv("CI") == null); + var link = createLink(ReadTestData.consolelink); var header = link.getHeader(); diff --git a/test/mslinks/WriteTests.java b/test/mslinks/WriteTests.java index 924b126..c4086de 100644 --- a/test/mslinks/WriteTests.java +++ b/test/mslinks/WriteTests.java @@ -19,6 +19,9 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Ignore; import org.junit.Test; import io.ByteWriter; @@ -35,6 +38,14 @@ public class WriteTests { private static final String PROJECT_DIR = "Programming\\Java\\mslinks"; private static final String RELATIVE_PATH = "..\\.."; + /** + * Disable tests on CI, because we cannot guarantee the checkout at C:\Programming\Java\mslinks + */ + @BeforeClass + public static void skipOnCi() { + Assume.assumeTrue(System.getenv("CI") == null); + } + private ShellLinkHelper createLink() { var link = new ShellLink(); var header = link.getHeader(); From d11f9464dc4d6e4ce9ae6c7935b8814474eec44b Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:19:16 +0100 Subject: [PATCH 02/14] Update .gitignore --- .gitignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index d113a89..bf5d865 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,5 @@ bin/ build/ *.pdf -.gradle -.idea/ -.vscode/ +.* +!.github/ From b5c243de99bd1bf2ce768a0e86bbf694642cf1ab Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:21:16 +0100 Subject: [PATCH 03/14] Remove CI skip --- test/mslinks/WriteTests.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/test/mslinks/WriteTests.java b/test/mslinks/WriteTests.java index c4086de..924b126 100644 --- a/test/mslinks/WriteTests.java +++ b/test/mslinks/WriteTests.java @@ -19,9 +19,6 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Ignore; import org.junit.Test; import io.ByteWriter; @@ -38,14 +35,6 @@ public class WriteTests { private static final String PROJECT_DIR = "Programming\\Java\\mslinks"; private static final String RELATIVE_PATH = "..\\.."; - /** - * Disable tests on CI, because we cannot guarantee the checkout at C:\Programming\Java\mslinks - */ - @BeforeClass - public static void skipOnCi() { - Assume.assumeTrue(System.getenv("CI") == null); - } - private ShellLinkHelper createLink() { var link = new ShellLink(); var header = link.getHeader(); From 8036c8f2723ac45b127bb4d8970940a91019a455 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:21:26 +0100 Subject: [PATCH 04/14] Test on ubuntu and macOS --- .github/workflows/check.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index bc33d16..afbd7db 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,7 +8,12 @@ on: jobs: build: - runs-on: windows-latest + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, ubuntu-arm, windows-latest, macos-latest] + + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v6 @@ -18,6 +23,11 @@ jobs: with: java-version: '11' distribution: 'temurin' + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v5 + with: + gradle-version: '7.1.1' - name: Run checks with Gradle - run: ./gradlew check + # Use gradle from "Setup Gradle" for faster CI builds + run: gradle check From 6bbf09effbe4e43d369e95b10bd13fee604c2c91 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:26:27 +0100 Subject: [PATCH 05/14] Try to use C:\Programming\Java --- .github/workflows/check.yml | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index afbd7db..aad76a7 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -16,7 +16,17 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@v6if + + - name: Create target directory + if: matrix.os == 'windows-latest' + run: | + mkdir C:\Programming\Java + + - name: Copy repository + if: matrix.os == 'windows-latest' + run: | + xcopy "${{ github.workspace }}" "C:\Programming\Java" /E /I /Y - name: Set up JDK uses: actions/setup-java@v5 @@ -28,6 +38,12 @@ jobs: with: gradle-version: '7.1.1' - - name: Run checks with Gradle + - name: Run checks with Gradle (Linux, macOS) + if: matrix.os != 'windows-latest' # Use gradle from "Setup Gradle" for faster CI builds run: gradle check + - name: Run checks with Gradle (Windows) + if: matrix.os == 'windows-latest' + run: | + cd C:\Programming\Java + gradle check From 30e4c0459b5754b08854d63df0eb37583f1d8a06 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:30:58 +0100 Subject: [PATCH 06/14] Fix typo --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index aad76a7..06b19bf 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -16,7 +16,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v6if + - uses: actions/checkout@v6 - name: Create target directory if: matrix.os == 'windows-latest' From db990b17b89efc8dbe8eaa9f1117d8bc396be749 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:32:27 +0100 Subject: [PATCH 07/14] Revert changes in TestLinkHeaderProperties --- test/mslinks/ReadTests.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/test/mslinks/ReadTests.java b/test/mslinks/ReadTests.java index 4348b83..19b6934 100644 --- a/test/mslinks/ReadTests.java +++ b/test/mslinks/ReadTests.java @@ -14,7 +14,6 @@ */ package mslinks; -import org.junit.Assume; import org.junit.Test; import io.ByteReader; @@ -57,9 +56,6 @@ public void TestLinkProperties() throws IOException, ShellLinkException { @Test public void TestLinkHeaderProperties() throws IOException, ShellLinkException { - // skip on CI, because time zone offsets cause issues - Assume.assumeTrue(System.getenv("CI") == null); - var link = createLink(ReadTestData.consolelink); var header = link.getHeader(); From 73a716f795ef9fe0de3ce7d4340db1d51fa09b39 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sat, 14 Feb 2026 11:45:22 +0100 Subject: [PATCH 08/14] Fix runner label --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 06b19bf..e85d59b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-arm, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-arm-latest, windows-latest, macos-latest] runs-on: ${{ matrix.os }} From b30d49446dc053b513c784b7146f86bd48e2a32e Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 09:22:05 +0100 Subject: [PATCH 09/14] Update gradle and enforce UTF-8 --- .github/workflows/check.yml | 26 +++++++------------------- 1 file changed, 7 insertions(+), 19 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index e85d59b..1864eeb 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,35 +15,23 @@ jobs: runs-on: ${{ matrix.os }} + env: + JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8 + steps: - uses: actions/checkout@v6 - - name: Create target directory - if: matrix.os == 'windows-latest' - run: | - mkdir C:\Programming\Java - - - name: Copy repository - if: matrix.os == 'windows-latest' - run: | - xcopy "${{ github.workspace }}" "C:\Programming\Java" /E /I /Y - - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: '11' + java-version: '17' distribution: 'temurin' + - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 with: - gradle-version: '7.1.1' + gradle-version: '9.3.1' - - name: Run checks with Gradle (Linux, macOS) - if: matrix.os != 'windows-latest' + - name: Run checks with Gradle # Use gradle from "Setup Gradle" for faster CI builds run: gradle check - - name: Run checks with Gradle (Windows) - if: matrix.os == 'windows-latest' - run: | - cd C:\Programming\Java - gradle check From 8a1d5dc5f778e1d922bacb2aa0068816baf68e74 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 09:25:11 +0100 Subject: [PATCH 10/14] Fix image name --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 1864eeb..155e51a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-arm-latest, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-latest-arm, windows-latest, macos-latest] runs-on: ${{ matrix.os }} From 33add1191f440f5840e1944b86bb8dae35cf06a0 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 09:27:09 +0100 Subject: [PATCH 11/14] Fix image name - again --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 155e51a..3b45dd7 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest, ubuntu-latest-arm, windows-latest, macos-latest] + os: [ubuntu-latest, ubuntu-24.04-arm, windows-latest, macos-latest] runs-on: ${{ matrix.os }} From 9af8f325fd5322bde7004cd9cdab116678f8b7ec Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 09:28:11 +0100 Subject: [PATCH 12/14] Minor tweak to enable manual running --- .github/workflows/check.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 3b45dd7..6c24e6b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -5,6 +5,11 @@ on: branches: [ main, master ] pull_request: branches: [ main, master ] + workflow_dispatch: + +concurrency: + group: "${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true jobs: build: From a3d212a5dcc2d3e79446dc8aa33410aed5f88be1 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 09:29:11 +0100 Subject: [PATCH 13/14] Add missing quote --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 6c24e6b..09406aa 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,7 +8,7 @@ on: workflow_dispatch: concurrency: - group: "${{ github.workflow }}-${{ github.head_ref || github.ref }} + group: "${{ github.workflow }}-${{ github.head_ref || github.ref }}" cancel-in-progress: true jobs: From 9903fed6e04234aa3458957add399db6f79cc1a0 Mon Sep 17 00:00:00 2001 From: Oliver Kopp Date: Sun, 15 Feb 2026 16:17:02 +0100 Subject: [PATCH 14/14] Use gradlew --- .github/workflows/check.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 09406aa..b2f9a5a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -34,9 +34,8 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v5 - with: - gradle-version: '9.3.1' - name: Run checks with Gradle - # Use gradle from "Setup Gradle" for faster CI builds - run: gradle check + shell: bash + # gradle from "setup-gradle" is not the versionf from the wrapper - see https://github.com/gradle/actions/issues/273 + run: ./gradlew check