add class variable hierarchy shadowing check, fixes #175 #76
Workflow file for this run
This file contains hidden or 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 (build & test) | |
| on: | |
| push: | |
| branches: [ master ] | |
| pull_request: | |
| types: [opened, synchronize, reopened] | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| build: | |
| name: Gradle build on ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, windows-latest] | |
| runs-on: ${{ matrix.os }} | |
| permissions: | |
| contents: read | |
| env: | |
| GRADLE_OPTS: -Dorg.gradle.daemon=false | |
| defaults: | |
| run: | |
| working-directory: de.peeeq.wurstscript | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup Temurin JDK 25 | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: '25' | |
| cache: 'gradle' | |
| # Linux only: use a portable, pristine Temurin 25 for jlink | |
| - name: (Linux) Install portable Temurin 25 | |
| if: runner.os == 'Linux' | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| URL="https://github.com/adoptium/temurin25-binaries/releases/download/jdk-25%2B36/OpenJDK25U-jdk_x64_linux_hotspot_25_36.tar.gz" | |
| mkdir -p "$RUNNER_TEMP/temurin25" | |
| curl -fsSL "$URL" -o "$RUNNER_TEMP/temurin25/jdk.tar.gz" | |
| tar -xzf "$RUNNER_TEMP/temurin25/jdk.tar.gz" -C "$RUNNER_TEMP/temurin25" | |
| PORTABLE_JAVA_HOME="$(find "$RUNNER_TEMP/temurin25" -maxdepth 1 -type d -name 'jdk-25*' | head -n1)" | |
| echo "PORTABLE_JAVA_HOME=$PORTABLE_JAVA_HOME" >> "$GITHUB_ENV" | |
| echo "$PORTABLE_JAVA_HOME/bin" >> "$GITHUB_PATH" | |
| # Pin Gradle toolchain to the active JDK (portable on Linux, setup-java on Windows) | |
| - name: Pin Gradle toolchain | |
| shell: bash | |
| run: | | |
| ACTIVE_JAVA_HOME="${PORTABLE_JAVA_HOME:-$JAVA_HOME}" | |
| echo "JAVA_HOME=${ACTIVE_JAVA_HOME}" >> "$GITHUB_ENV" | |
| echo "${ACTIVE_JAVA_HOME}/bin" >> "$GITHUB_PATH" | |
| echo "org.gradle.java.installations.paths=${ACTIVE_JAVA_HOME}" >> gradle.properties | |
| echo "org.gradle.java.installations.auto-detect=false" >> gradle.properties | |
| - name: Show Java & jlink | |
| shell: bash | |
| run: | | |
| echo "JAVA_HOME=$JAVA_HOME" | |
| "$JAVA_HOME/bin/java" -version | |
| "$JAVA_HOME/bin/jlink" --version | |
| - name: Validate Gradle wrapper | |
| uses: gradle/actions/wrapper-validation@v4 | |
| - name: Setup Gradle (cache) | |
| uses: gradle/actions/setup-gradle@v4 | |
| # ---- FAIL FAST: package first (so jlink issues show immediately) ---- | |
| - name: Package slim runtime (fail fast) | |
| shell: bash | |
| run: ./gradlew checksumSlimCompilerDist --no-daemon --stacktrace | |
| - name: Run tests | |
| shell: bash | |
| run: ./gradlew test --no-daemon --stacktrace | |
| - name: Upload packaged artifact (per-OS) | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: wurst-compiler-${{ matrix.os }} | |
| path: | | |
| de.peeeq.wurstscript/build/releases/*.zip | |
| de.peeeq.wurstscript/build/releases/*.tar.gz | |
| de.peeeq.wurstscript/build/releases/*.sha256 | |
| if-no-files-found: error | |
| retention-days: 7 | |
| nightly_release: | |
| name: Nightly prerelease (master) | |
| needs: build | |
| if: github.ref == 'refs/heads/master' && github.event_name == 'push' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write # needed to publish a Release with GITHUB_TOKEN | |
| steps: | |
| - name: Download all packaged artifacts | |
| # grabs every artifact your matrix uploaded (keeps your names) | |
| uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: Gather files | |
| shell: bash | |
| run: | | |
| mkdir -p upload | |
| # pick up what your existing packaging already produced | |
| find artifacts -type f \( -name '*.zip' -o -name '*.tar.gz' -o -name '*.sha256' \) -print0 | xargs -0 -I{} cp "{}" upload/ | |
| - name: Normalize nightly filenames | |
| shell: bash | |
| run: | | |
| # Copy artifacts into ./upload first (keep your existing step if you already do this) | |
| # Then rename: replace the first version-looking token with 'nightly' | |
| shopt -s nullglob | |
| for f in upload/*; do | |
| base="$(basename "$f")" | |
| new="$(echo "$base" | sed -E 's/([0-9]+\.[0-9]+(\.[0-9]+)*([.-][0-9A-Za-z]+)*)/nightly/; s/--/-/g')" | |
| # only rename if it actually changed and if it won't overwrite a different file type | |
| if [[ "$base" != "$new" ]]; then | |
| mv -f "upload/$base" "upload/$new" | |
| fi | |
| done | |
| - name: Publish Nightly Release (rolling "nightly" tag) | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: nightly-master | |
| name: Nightly Build (master) | |
| prerelease: true | |
| draft: false | |
| make_latest: false | |
| generate_release_notes: false | |
| body: | | |
| Nightly build for the latest commit on `master`. | |
| This release is automatically updated in-place. | |
| files: | | |
| upload/*.zip | |
| upload/*.tar.gz | |
| upload/*.sha256 | |
| fail_on_unmatched_files: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |