Skip to content

release

release #389

Workflow file for this run

name: release
on:
schedule:
- cron: '0 8 * * *'
workflow_dispatch:
inputs:
JDT_LS_VERSION:
description: 'The (optional) release version (including qualifier) of JDT-LS to use.'
type: string
publishPreRelease:
description: 'Publish a pre-release ?'
required: true
type: choice
options:
- 'true'
- 'false'
default: 'true'
publishToMarketPlace:
description: 'Publish to VS Code Marketplace ?'
required: true
type: choice
options:
- 'true'
- 'false'
default: 'false'
publishToOVSX:
description: 'Publish to OpenVSX Registry ?'
required: true
type: choice
options:
- 'true'
- 'false'
default: 'false'
jobs:
should-build-change:
runs-on: ubuntu-latest
outputs:
repo-cache-hit: ${{ steps.cache-last-commit.outputs.cache-hit }}
steps:
- uses: actions/checkout@v4
with:
repository: 'eclipse-jdtls/eclipse.jdt.ls'
fetch-depth: 2
path: eclipse.jdt.ls
- uses: actions/checkout@v4
with:
repository: 'redhat-developer/vscode-java'
fetch-depth: 2
path: vscode-java
- run: |
pushd eclipse.jdt.ls
git rev-parse HEAD >> ../lastCommit
popd
pushd vscode-java
git rev-parse HEAD >> ../lastCommit
- name: Check New Changes
id: cache-last-commit
uses: actions/cache@v4
with:
path: lastCommit
key: lastCommit-${{ hashFiles('lastCommit') }}
packaging-job:
runs-on: ubuntu-latest
needs: should-build-change
if: ${{ needs.should-build-change.outputs.repo-cache-hit != 'true' || github.event_name != 'schedule' }}
steps:
- name: Checkout JDT-LS
if: "${{ inputs.JDT_LS_VERSION == '' }}"
uses: actions/checkout@v4
with:
repository: eclipse-jdtls/eclipse.jdt.ls
- name: Cache Maven local repository
uses: actions/cache@v4
with:
path: |
~/.m2/repository
~/.m2/wrapper
!~/.m2/repository/org/eclipse/jdt/ls
key: maven-local-${{ hashFiles('**/pom.xml') }}
- name: Set Up Java
uses: actions/setup-java@v4
with:
java-version: '23'
distribution: 'adopt'
- name: Build JDT-LS
if: "${{ inputs.JDT_LS_VERSION == '' }}"
run: |
./mvnw clean verify -B -U -DskipTests -Pserver-distro
mkdir ../staging
cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging
- name: Check Out VS Code Java
uses: actions/checkout@v4
- name: Set Up NodeJS
uses: actions/setup-node@v4
with:
node-version: '18'
- name: Install NodeJS dependencies
run: npm install -g typescript "@vscode/vsce" "ovsx"
- name: Download JDT-LS Release
if: "${{ inputs.JDT_LS_VERSION != '' }}"
run: |
version=`echo ${{ inputs.JDT_LS_VERSION }} | cut -d- -f1`
curl -LO https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${{ inputs.JDT_LS_VERSION }}.tar.gz
- name: Build vscode-java
run: |
npm install
- name: Prepare JDT-LS
run: |
rm -rf ./out
mkdir server/
if [ -e jdt-language-server-*.tar.gz ]; then
tar -xf jdt-language-server-*.tar.gz -C server/
else
tar -xf ../staging/jdt-language-server-*.tar.gz -C server/
fi
echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV
- name: Test vscode-java
env:
SKIP_COMMANDS_TEST: true
run: |
xvfb-run --auto-servernum npm run test --silent
continue-on-error: true
- name: Clean tests
run: npx gulp clean_test_folder
- name: Prepare Lombok Support
run: |
npx gulp download_lombok
- name: Prepare Pre-Release
if: ${{ github.event_name == 'schedule' || inputs.publishPreRelease == 'true' }}
run: |
npx gulp prepare_pre_release
echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV
- name: Package vscode-java
run: |
platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64")
for platform in ${platforms[@]}; do
npx gulp download_jre --target ${platform} --javaVersion 17
vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix
done
rm -rf jre/
vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix
ls -lash *.vsix
- name: Upload VSIX Artifacts
uses: actions/upload-artifact@v4
with:
name: vscode-java
path: |
java-*-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix
vscode-java-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix
if-no-files-found: error
- name: Publish to GH Release Tab
if: ${{ inputs.publishToMarketPlace == 'true' && inputs.publishToOVSX == 'true' }}
uses: "marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "v${{ env.EXT_VERSION }}"
title: "${{ env.EXT_VERSION }}"
draft: true
files: |
java-*-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix
vscode-java-${{ env.EXT_VERSION }}-${{ github.run_number }}.vsix
release-job:
environment: ${{ (inputs.publishToMarketPlace == 'true' || inputs.publishToOVSX == 'true') && 'release' || 'pre-release' }}
runs-on: ubuntu-latest
needs: packaging-job
steps:
- name: Set Up NodeJS
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: |
npm install -g typescript "@vscode/vsce" "ovsx"
- name: Download VSIX & JDT-LS
uses: actions/download-artifact@v4
- name: Publish to VS Code Marketplace
if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }}
run: |
for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do
vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix}
done
vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix
- name: Publish to OpenVSX Registry
if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }}
run: |
for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do
ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix}
done
ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix