diff --git a/.github/workflows/forward-compatibility.yml b/.github/workflows/forward-compatibility.yml new file mode 100644 index 000000000000..e5d8bb16eff1 --- /dev/null +++ b/.github/workflows/forward-compatibility.yml @@ -0,0 +1,64 @@ +name: Forward Compatibility + +on: + push: + paths: + - .github/workflows/forward-compatibility.yml + schedule: + - cron: '0 3 * * *' + workflow_dispatch: + +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event_name }} + cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} + +env: + TRAVIS_OS_NAME: linux + SPEC_SPLIT_DOTS: 160 + +jobs: + # Test against *each* supported Crystal version for forward compatibility. + # + # This workflow runs on a nightly schedule on `master`. + # It can also be dispatched manually when necessary. + # + # We run a basic version of this test on every commit which covers only the earliest and latest supported versions in `linux.yml#x86_64-gnu-test`. + x86_64-gnu-test-forward_compatibility: + env: + ARCH: x86_64 + ARCH_CMD: linux64 + DOCKER_TEST_PREFIX: crystallang/crystal:${{ matrix.crystal_bootstrap_version }} + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + crystal_bootstrap_version: [1.7.3, 1.8.2, 1.9.2, 1.10.1, 1.11.2, 1.12.2, 1.13.3, 1.14.1] + flags: [""] + include: + # libffi is only available starting from the 1.2.2 build images + - crystal_bootstrap_version: 1.1.1 + flags: "FLAGS=-Dwithout_ffi USE_PCRE1=true" + - crystal_bootstrap_version: 1.2.2 + flags: "USE_PCRE1=true" + - crystal_bootstrap_version: 1.3.2 + flags: "USE_PCRE1=true" + - crystal_bootstrap_version: 1.4.1 + flags: "USE_PCRE1=true" + - crystal_bootstrap_version: 1.5.1 + flags: "USE_PCRE1=true" + - crystal_bootstrap_version: 1.6.2 + flags: "USE_PCRE1=true" + steps: + - name: Download Crystal source + uses: actions/checkout@v4 + + - name: Prepare System + run: bin/ci prepare_system + + - name: Prepare Build + run: bin/ci prepare_build + + - name: Test + run: ${{ matrix.flags }} bin/ci build diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index aff46c8d76be..2d7852f06965 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -13,6 +13,10 @@ env: SPEC_SPLIT_DOTS: 160 jobs: + # Test against latest release and the earliest supported Crystal version for forward compatibility. + # + # A more advanced test which runs against *each* supported version is available in `forward-compatibility.yml` and + # runs regularly on a nightly schedule. x86_64-gnu-test: env: ARCH: x86_64 @@ -22,24 +26,12 @@ jobs: strategy: fail-fast: false matrix: - crystal_bootstrap_version: [1.7.3, 1.8.2, 1.9.2, 1.10.1, 1.11.2, 1.12.2, 1.13.3, 1.14.1, 1.15.1] flags: [""] include: # libffi is only available starting from the 1.2.2 build images - crystal_bootstrap_version: 1.0.0 flags: "FLAGS=-Dwithout_ffi USE_PCRE1=true" - - crystal_bootstrap_version: 1.1.1 - flags: "FLAGS=-Dwithout_ffi USE_PCRE1=true" - - crystal_bootstrap_version: 1.2.2 - flags: "USE_PCRE1=true" - - crystal_bootstrap_version: 1.3.2 - flags: "USE_PCRE1=true" - - crystal_bootstrap_version: 1.4.1 - flags: "USE_PCRE1=true" - - crystal_bootstrap_version: 1.5.1 - flags: "USE_PCRE1=true" - - crystal_bootstrap_version: 1.6.2 - flags: "USE_PCRE1=true" + - crystal_bootstrap_version: 1.15.1 # LATEST RELEASE steps: - name: Download Crystal source uses: actions/checkout@v4 diff --git a/scripts/release-update.sh b/scripts/release-update.sh index b6216ce3d6df..ed2f8c111685 100755 --- a/scripts/release-update.sh +++ b/scripts/release-update.sh @@ -34,7 +34,9 @@ sed -i -E "s|crystal-[0-9.]+-[0-9]|crystal-$CRYSTAL_VERSION-1|g" bin/ci # Edit .github/workflows/*.yml to point to docker image # Update the patch version of the latest entry if same minor version to have only one item per minor version -sed -i -E "/crystal_bootstrap_version:/ s/(, ${CRYSTAL_VERSION%.*}\.[0-9]*)?\]\$/, $CRYSTAL_VERSION]/" .github/workflows/linux.yml +previous_release=$(grep -o -P '(?<=crystal_bootstrap_version: ).*(?= # LATEST RELEASE)' .github/workflows/linux.yml) +sed -i -E "s/crystal_bootstrap_version: .+ # LATEST RELEASE/crystal_bootstrap_version: $CRYSTAL_VERSION # LATEST RELEASE/" .github/workflows/linux.yml +sed -i -E "/crystal_bootstrap_version:/ s/(, ${previous_release%.*}\.[0-9]*)?\]\$/, $previous_release]/" .github/workflows/forward-compatibility.yml sed -i -E "s|crystallang/crystal:[0-9.]+|crystallang/crystal:$CRYSTAL_VERSION|g" .github/workflows/*.yml # Edit .github/workflows/*.yml to update version for install-crystal action