Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
15248cd
Refactor PTX plugins: replace `org.graalvm.compiler` imports with `jd…
mikepapadim Jan 30, 2026
d8488c0
[feat] Update TornadoVM for JDK 25 compatibility: modify version refe…
mikepapadim Feb 4, 2026
d9d24bd
[feat] Add and integrate `TornadoInliningException` for improved erro…
mikepapadim Feb 4, 2026
52367aa
[refactor] Update operand usage in OCLLIRStmt and OCLUnary for improv…
mikepapadim Feb 5, 2026
e46e3f8
[fix] Update OCLBackend to use an empty AllocatableValue array in LIR…
mikepapadim Feb 5, 2026
5084815
fix: Change condition field from final to non-final in OCLControlFlow…
mikepapadim Feb 5, 2026
90ff23c
[feat] Add DisableOverflownCountedLoopsPhase to OCLHighTier for enhan…
mikepapadim Feb 5, 2026
4f73d22
[feat] Add configuration files and scripts for TornadoVM deployment a…
mikepapadim Feb 5, 2026
f7619a1
feat: Enhance emitZeroExtend method with logging for OpenCL backend
mikepapadim Feb 5, 2026
c9b4b19
refactor: streamline OCLHalfFloatPlugins and OCLVectorPlugins for imp…
mikepapadim Feb 5, 2026
6727d0f
[feat] Implement HalfFloat handling in TornadoHalfFloatFixedGuardElim…
mikepapadim Feb 5, 2026
1d7a853
refactor: reorganize imports and enhance memory access plugin registr…
mikepapadim Feb 5, 2026
9f9ab3c
refactor TornadoAtomicsParametersPhase.java: streamline atomic node c…
mikepapadim Feb 5, 2026
423cdc8
feat: Add TornadoInternalGraphBuilder for enhanced graph building cap…
mikepapadim Feb 5, 2026
e1a6ddc
[debug] Add debug print statements in OCLBlockVisitor and OCLLIRGener…
mikepapadim Feb 5, 2026
f5c8037
Add exports
mikepapadim Feb 5, 2026
2fecf61
[cleanup] Remove unnecessary debug print statements in OCLBlockVisito…
mikepapadim Feb 6, 2026
a2c56d0
[fix] Enhance logging in OCLLIRGenerator for emitStrategySwitch and e…
mikepapadim Feb 6, 2026
a6867e9
[fix] Simplify JDK version extraction logic in tornado.py
mikepapadim Feb 6, 2026
e2478f6
fix: Update pom.xml to remove deprecated showDeprecation flag and sim…
mikepapadim Feb 6, 2026
5eaa516
[cleanup] Remove unused GraalJDK25 export lists for common, OpenCL, P…
mikepapadim Feb 6, 2026
34e601b
[WIP][PTX][JDK25] Add support for JDK25 in PTX backend
mikepapadim Feb 10, 2026
56d0d0b
[refactor][PTX] Add buffer offset handling and improve field hierarch…
mikepapadim Feb 10, 2026
8661302
[fix][PTX] Implement contiguous buffer support in PTXArrayWrapper for…
mikepapadim Feb 10, 2026
37bd1e6
[config][runtime] Update default value of TRACE_BUILD_LIR to false
mikepapadim Feb 10, 2026
991867c
[refactor][PTX] Simplify `getStackKind`
mikepapadim Feb 10, 2026
7f9ee4e
Merge branch 'develop' into jdk25-incremental
mikepapadim Feb 10, 2026
ad62100
[WIP][SPIRV] Migrate to JDK25 and Graal compiler 25.0.2
mikepapadim Feb 10, 2026
8aa3ba7
Enhance SPIRV memory access by adding composite usage annotations and…
mikepapadim Feb 10, 2026
ebf8855
Fix SPIRVFPBinaryIntrinsicNode operations to use JavaKind.Object for …
mikepapadim Feb 10, 2026
68ebb72
Refactor SPIRVArithmeticTool and SPIRVLIRStmt to improve zero extensi…
mikepapadim Feb 10, 2026
e791364
Add keyConstants to SwitchStatement and update emitRangeTableSwitch t…
mikepapadim Feb 11, 2026
1671be2
refactor: Clean up imports and improve code formatting in analysis cl…
mikepapadim Feb 11, 2026
5fb3e0f
[feat] Update PTX, OpenCL, and SPIR-V exports for Graal compiler inte…
mikepapadim Feb 11, 2026
fb66b08
feat: Enable native access for backend modules in tornado.py to avoid…
mikepapadim Feb 11, 2026
aaa7cb2
[ci] Add GitHub Actions workflow for building and testing JDK 25 with…
mikepapadim Feb 11, 2026
9603c62
[ci] Update JDK 25 and Graal paths in GitHub Actions workflow
mikepapadim Feb 11, 2026
6806f53
refactor: Clean up commented code and improve copyright header in OCL…
mikepapadim Feb 13, 2026
c54d7ad
refactor: Remove commented-out code and update copyright year in OCL …
mikepapadim Feb 13, 2026
5df266a
refactor: Remove unused commented-out code in PTXLIRGenerator.java
mikepapadim Feb 13, 2026
6dac2ae
refactor: Remove unused commented-out code in PTXHotSpotBackendFactor…
mikepapadim Feb 13, 2026
028a347
Add missing license and rm commented out poc code
mikepapadim Feb 13, 2026
6394e2f
Merge branch 'jdk25' of github.com:beehive-lab/TornadoVM into jdk25-i…
mikepapadim Feb 13, 2026
b2ea24c
fix: Update module-info.java to maintain transitive dependency on jdk…
mikepapadim Feb 13, 2026
6904871
Add JDK 25 release workflows for dual-release support
claude Feb 13, 2026
92e046d
Rename JDK 25 workflows to JDK 25.0.2 for JVMCI version precision
claude Feb 13, 2026
08fcaf2
refactor: Clean up commented-out code in TornadoNativeTypeElimination…
mikepapadim Feb 16, 2026
9839212
Remove deprecated class
mikepapadim Feb 16, 2026
e2fbadd
[fix] Added native access for levelzero jni module to avoid restricte…
stratika Feb 16, 2026
2a6624f
feat: Update TornadoVM installer to support JDK 25
mikepapadim Feb 16, 2026
576ed0b
[WIP] Update installer configuration for JDK 25 support
mikepapadim Feb 16, 2026
da9fb4c
[fix] Avoid module mismatch on GraalVM and add native access flags in…
stratika Feb 16, 2026
5eda6c0
[refactor] Update jdk25 in Makefile for Windows OS and updated rules
stratika Feb 16, 2026
c6b4e4c
feat: Update installer configuration for JDK 25 support
mikepapadim Feb 16, 2026
a70f5e2
Merge branch 'jdk25' of github.com:beehive-lab/TornadoVM into jdk25-i…
mikepapadim Feb 16, 2026
656bb22
Update tornado-drivers/opencl/src/main/java/uk/ac/manchester/tornado/…
stratika Feb 17, 2026
1f12882
Update tornado-assembly/src/etc/exportLists/opencl-exports
stratika Feb 17, 2026
dbee516
Update tornado-assembly/src/etc/exportLists/common-exports
stratika Feb 17, 2026
0ba58a1
refactor: Remove unused GraalVM compiler requirement and clean up OCL…
mikepapadim Feb 17, 2026
53a678b
Merge branch 'jdk25' of github.com:beehive-lab/TornadoVM into jdk25-i…
mikepapadim Feb 17, 2026
f8b1bbb
fix: Update logging backend in emitZeroExtend method to use PTX inste…
mikepapadim Feb 17, 2026
eaeeb99
[feat] Add new files and structure for enhanced functionality
mikepapadim Feb 17, 2026
55c7053
refactor: Remove unnecessary blank line in TornadoConstantFieldProvider
mikepapadim Feb 17, 2026
43d32a9
[style] Removed comments and resolved style code issues in SPIR-V bac…
stratika Feb 17, 2026
d63a37d
Merge remote-tracking branch 'public/jdk25' into jdk25
stratika Feb 17, 2026
bfb35f1
[style] Added copyright header in export lists
stratika Feb 17, 2026
293b32c
[refactor] Removed not needed class
stratika Feb 17, 2026
ebbecc3
feat: Update installer configuration for JDK 25 and adjust OCLHalfFlo…
mikepapadim Feb 17, 2026
61410c0
Merge branch 'jdk25' of github.com:beehive-lab/TornadoVM into jdk25-i…
mikepapadim Feb 17, 2026
74313a4
[tests] Remove assertions from unit-tests triggered by Makefile in Wi…
stratika Feb 17, 2026
7e2cd43
style: Update copyright header and reformat imports in OCLUnary.java
mikepapadim Feb 17, 2026
ba3af31
Merge remote-tracking branch 'public/jdk25' into jdk25
stratika Feb 17, 2026
860fb3f
feat: Add JVMCI compatibility check for Java version 25.0.2 in tornad…
mikepapadim Feb 17, 2026
bc2fdf6
Merge branch 'jdk25' of github.com:beehive-lab/TornadoVM into jdk25-i…
mikepapadim Feb 17, 2026
357e953
Revert workflow naming to jdk25 (drop .0.2 minor identifier)
claude Feb 17, 2026
8909e8d
feat: Add missing requirement for org.graalvm.word in module-info.java
mikepapadim Feb 18, 2026
3bb3f99
refactor: Remove debug print statement from PTXLIRGenerator.java
mikepapadim Feb 18, 2026
4493522
Merge pull request #799 from mikepapadim/claude/add-jdk25-support-S0dt0
mikepapadim Feb 19, 2026
f1e1ae1
Add workflows for JDK 25 release preparation and finalization
mikepapadim Feb 24, 2026
5632481
Refactor test scripts and JSON parser for improved clarity and functi…
mikepapadim Feb 24, 2026
afb9b08
Prepare release 3.0.0-jdk25
github-actions[bot] Feb 24, 2026
e3d166a
Merge pull request #806 from beehive-lab/release-jdk25/3.0.0-jdk25
mikepapadim Feb 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
369 changes: 369 additions & 0 deletions .github/workflows/1-prepare-release-jdk21.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,369 @@
name: Prepare TornadoVM Release

on:
workflow_dispatch:
inputs:
version:
description: 'Release version (e.g., 2.0.1)'
required: true
type: string
previous_version:
description: 'Previous version for changelog (e.g., 2.0.0)'
required: true
type: string
dry_run:
description: 'Dry run - show changes without creating PR'
required: false
type: boolean
default: false

env:
VERSION: ${{ inputs.version }}
PREV_VERSION: ${{ inputs.previous_version }}

jobs:
prepare-release:
if: github.repository == 'beehive-lab/TornadoVM'
runs-on: [self-hosted, Linux, x64]
permissions:
contents: write
pull-requests: write
timeout-minutes: 15
env:
JAVA_HOME: /opt/jenkins/jdks/graal-23.1.0/jdk-21.0.3
MAVEN_HOME: /opt/maven

steps:
- name: Validate version format
run: |
if [[ ! "${{ inputs.version }}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
echo "❌ Invalid version format. Expected: X.Y.Z (e.g., 2.0.1)"
exit 1
fi
echo "✅ Version format valid: ${{ inputs.version }}"

- name: Checkout develop branch
uses: actions/checkout@v4
with:
ref: develop
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}

- name: Setup environment
run: |
echo "$JAVA_HOME/bin" >> $GITHUB_PATH
echo "$MAVEN_HOME/bin" >> $GITHUB_PATH

- name: Configure Git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Create release branch
run: |
git checkout -b release/${{ env.VERSION }}
echo "✅ Created branch: release/${{ env.VERSION }}"

# ============================================
# VERSION UPDATES
# ============================================

- name: Update Maven versions
run: |
./mvnw versions:set -DnewVersion=${{ env.VERSION }} -DgenerateBackupPoms=false
echo "✅ Maven versions updated to ${{ env.VERSION }}"

- name: Update tornadovm-installer version
run: |
sed -i 's/__VERSION__ = "v[0-9]\+\.[0-9]\+\.[0-9]\+\(-[a-zA-Z0-9]*\)\?"/__VERSION__ = "v${{ env.VERSION }}"/' bin/tornadovm-installer
echo "Updated bin/tornadovm-installer:"
grep -n "__VERSION__" bin/tornadovm-installer

- name: Update tornado-test version
run: |
sed -i 's/__VERSION__ = "[0-9]\+\.[0-9]\+\.[0-9]\+\(-dev\)\?"/__VERSION__ = "${{ env.VERSION }}"/' tornado-assembly/src/bin/tornado-test
echo "Updated tornado-assembly/src/bin/tornado-test:"
grep -n "__VERSION__" tornado-assembly/src/bin/tornado-test

- name: Update README.md
run: |
# Update version badge
sed -i 's/version-[0-9]\+\.[0-9]\+\.[0-9]\+-purple/version-${{ env.VERSION }}-purple/g' README.md

# Update "Latest Release" line with current date (DD/MM/YYYY format)
RELEASE_DATE=$(date +"%d/%m/%Y")
sed -i "s|\*\*Latest Release:\*\* TornadoVM [0-9]\+\.[0-9]\+\.[0-9]\+ - [0-9/]\+|**Latest Release:** TornadoVM ${{ env.VERSION }} - ${RELEASE_DATE}|" README.md

# Update Maven Central dependency versions (io.github.beehive-lab groupId)
sed -i 's|<version>[0-9]\+\.[0-9]\+\.[0-9]\+</version>|<version>${{ env.VERSION }}</version>|g' README.md

echo "✅ Updated README.md"

- name: Update docs/source/conf.py
run: |
if [ -f docs/source/conf.py ]; then
# conf.py uses "vX.Y.Z" format with double quotes
sed -i 's|release = "v[0-9]\+\.[0-9]\+\.[0-9]\+"|release = "v${{ env.VERSION }}"|' docs/source/conf.py
sed -i 's|version = "v[0-9]\+\.[0-9]\+\.[0-9]\+"|version = "v${{ env.VERSION }}"|' docs/source/conf.py
echo "✅ Updated docs/source/conf.py"
grep -E "(version|release) =" docs/source/conf.py
fi

- name: Update docs/source/installation.rst
run: |
if [ -f docs/source/installation.rst ]; then
# Update Maven dependency versions in the XML examples
sed -i 's|<version>[0-9]\+\.[0-9]\+\.[0-9]\+</version>|<version>${{ env.VERSION }}</version>|g' docs/source/installation.rst

# Add new version to "Versions available" list (insert before previous version)
sed -i "/^\* ${{ env.PREV_VERSION }}$/i\\ * ${{ env.VERSION }}" docs/source/installation.rst

echo "✅ Updated docs/source/installation.rst"
fi

# ============================================
# CHANGELOG GENERATION
# ============================================

- name: Fetch merged PRs for changelog
id: fetch_prs
uses: actions/github-script@v7
with:
script: |
const prevVersion = '${{ env.PREV_VERSION }}';
const newVersion = '${{ env.VERSION }}';

// Find the previous release date
let sinceDate;
try {
const { data: releases } = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
per_page: 10
});

const prevRelease = releases.find(r =>
r.tag_name === `v${prevVersion}` || r.tag_name === prevVersion
);
if (prevRelease) {
sinceDate = prevRelease.published_at;
console.log(`Found previous release ${prevVersion} from ${sinceDate}`);
}
} catch (e) {
console.log('Could not fetch releases:', e.message);
}

if (!sinceDate) {
const date = new Date();
date.setDate(date.getDate() - 90);
sinceDate = date.toISOString();
console.log(`Using fallback date: ${sinceDate}`);
}

// Fetch merged PRs since last release
const { data: prs } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'closed',
sort: 'updated',
direction: 'desc',
per_page: 100
});

const mergedPRs = prs.filter(pr =>
pr.merged_at && new Date(pr.merged_at) > new Date(sinceDate)
);

console.log(`Found ${mergedPRs.length} merged PRs since ${sinceDate}`);

// Categorize PRs
const improvements = [];
const bugfixes = [];
const compatibility = [];
const other = [];

for (const pr of mergedPRs) {
const labels = pr.labels.map(l => l.name.toLowerCase());
const title = pr.title.replace(/`/g, '\\`');
const entry = `- \`#${pr.number} <${pr.html_url}>\`_: ${title}`;

if (labels.some(l => l.includes('bug') || l.includes('fix'))) {
bugfixes.push(entry);
} else if (labels.some(l => l.includes('enhancement') || l.includes('feature') || l.includes('improvement'))) {
improvements.push(entry);
} else if (labels.some(l => l.includes('compat') || l.includes('doc') || l.includes('ci') || l.includes('build'))) {
compatibility.push(entry);
} else {
other.push(entry);
}
}

// Generate RST changelog entry
const today = new Date();
const dateStr = `${String(today.getDate()).padStart(2, '0')}/${String(today.getMonth() + 1).padStart(2, '0')}/${String(today.getFullYear()).slice(-2)}`;

let changelog = `TornadoVM ${newVersion}\n`;
changelog += '-'.repeat(`TornadoVM ${newVersion}`.length) + '\n';
changelog += `${dateStr}\n\n`;

if (improvements.length > 0) {
changelog += 'Improvements\n~~~~~~~~~~~~\n\n';
changelog += improvements.join('\n') + '\n\n';
}

if (compatibility.length > 0) {
changelog += 'Compatibility\n~~~~~~~~~~~~\n\n';
changelog += compatibility.join('\n') + '\n\n';
}

if (bugfixes.length > 0) {
changelog += 'Bug Fixes\n~~~~~~~~~~~~\n\n';
changelog += bugfixes.join('\n') + '\n\n';
}

if (other.length > 0) {
changelog += 'Other Changes\n~~~~~~~~~~~~\n\n';
changelog += other.join('\n') + '\n\n';
}

if (mergedPRs.length === 0) {
changelog += '.. TODO: Add changes manually\n\n';
}

// Write to file for next step
const fs = require('fs');
fs.writeFileSync('/tmp/changelog_entry.txt', changelog);

core.setOutput('pr_count', mergedPRs.length);

- name: Update CHANGELOG.rst
run: |
CHANGELOG_FILE="docs/source/CHANGELOG.rst"

if [ ! -f "$CHANGELOG_FILE" ]; then
echo "⚠️ CHANGELOG.rst not found"
exit 0
fi

# Find insertion point (after "This file summarizes...")
INSERT_LINE=$(grep -n "This file summarizes" "$CHANGELOG_FILE" | head -1 | cut -d: -f1)

if [ -n "$INSERT_LINE" ]; then
INSERT_LINE=$((INSERT_LINE + 2))

head -n "$INSERT_LINE" "$CHANGELOG_FILE" > /tmp/changelog_new.rst
echo "" >> /tmp/changelog_new.rst
cat /tmp/changelog_entry.txt >> /tmp/changelog_new.rst
tail -n +$((INSERT_LINE + 1)) "$CHANGELOG_FILE" >> /tmp/changelog_new.rst
mv /tmp/changelog_new.rst "$CHANGELOG_FILE"

echo "✅ Updated CHANGELOG.rst"
else
echo "⚠️ Could not find insertion point in CHANGELOG.rst"
fi

# ============================================
# SUMMARY & PR CREATION
# ============================================

- name: Show changes summary
run: |
echo "## 📋 Release ${{ env.VERSION }} Preparation" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Files Modified:" >> $GITHUB_STEP_SUMMARY
git diff --name-only | while read file; do
echo "- \`$file\`" >> $GITHUB_STEP_SUMMARY
done
echo "" >> $GITHUB_STEP_SUMMARY
echo "### PRs included: ${{ steps.fetch_prs.outputs.pr_count }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Next steps after PR merge:" >> $GITHUB_STEP_SUMMARY
echo "1. Existing CI will run build & tests" >> $GITHUB_STEP_SUMMARY
echo "2. Run \`deploy-maven-central\` workflow" >> $GITHUB_STEP_SUMMARY
echo "3. Create GitHub release with tag \`v${{ env.VERSION }}\`" >> $GITHUB_STEP_SUMMARY

- name: Commit and push
if: ${{ inputs.dry_run == false }}
run: |
git add -A
git commit -m "Prepare release ${{ env.VERSION }}"
git push origin release/${{ env.VERSION }}

- name: Create Pull Request
if: ${{ inputs.dry_run == false }}
uses: actions/github-script@v7
with:
script: |
const version = process.env.VERSION;
const prCount = '${{ steps.fetch_prs.outputs.pr_count }}';

const { data: pr } = await github.rest.pulls.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: `Release ${version}`,
head: `release/${version}`,
base: 'master',
body: `## Release ${version}

Auto-generated release preparation PR.

### Changes
- ${prCount} PRs included in changelog
- Version bumped in all files

### Review checklist
- [ ] Version numbers correct in all files
- [ ] CHANGELOG.rst content reviewed and edited
- [ ] CI passes (build + tests)

### After merge
1. CI runs automatically ✅
2. Run **deploy-maven-central** workflow manually
3. Create GitHub Release with tag \`v${version}\`
4. Merge master → develop
5. Bump develop to \`${version.replace(/(\d+)$/, m => parseInt(m)+1)}-dev\`
`
});

console.log(`✅ Created PR #${pr.number}: ${pr.html_url}`);

// Request reviewers
const reviewers = ['mikepapadim', 'stratika', 'kotselidis', 'mairooni', 'orionpapadakis'];

try {
await github.rest.pulls.requestReviewers({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
reviewers: reviewers
});
console.log(`✅ Requested reviewers: ${reviewers.join(', ')}`);
} catch (e) {
console.log('Could not request reviewers:', e.message);
}

// Add label if exists
try {
await github.rest.issues.addLabels({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: pr.number,
labels: ['release']
});
} catch (e) {
console.log('Could not add label:', e.message);
}

- name: Dry run output
if: ${{ inputs.dry_run == true }}
run: |
echo "🏃 DRY RUN MODE"
echo ""
echo "=== Files changed ==="
git diff --stat
echo ""
echo "=== Changelog entry ==="
cat /tmp/changelog_entry.txt
echo ""
echo "=== Full diff ==="
git diff
Loading
Loading