[Release] version 0.2.0 #290
This file contains 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: Scala CI | |
on: [ push, pull_request ] | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'oracle' | |
- name: Get commit timestamp | |
uses: actions/github-script@v6 | |
id: commit-timestamp | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const commit_details = await github.rest.git.getCommit({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
commit_sha: context.sha | |
}); | |
return Date.parse(commit_details.data.author.date) / 1000; | |
- name: Cache coursier cache | |
uses: actions/cache@v3 | |
with: | |
path: ~/.cache/coursier | |
key: ${{ runner.os }}-coursier-cache-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/**/*.scala') }} | |
restore-keys: | | |
${{ runner.os }}-coursier-cache-${{ hashFiles('**/*.sbt') }} | |
${{ runner.os }}-coursier-cache | |
- name: Cache sbt | |
uses: actions/cache@v4 | |
with: | |
path: ~/.sbt | |
key: ${{ runner.os }}-sbt-${{ hashFiles('**/*.sbt') }}-${{ hashFiles('project/**/*.scala') }} | |
restore-keys: | | |
${{ runner.os }}-sbt-${{ hashFiles('**/*.sbt') }} | |
${{ runner.os }}-sbt | |
- name: Test | |
run: sbt test | |
- name: Package | |
run: sbt packageArtifact packageArtifactZip "generateUpdatePluginsXml https://github.com/$GITHUB_REPOSITORY/releases/download/nightly/" | |
env: | |
VERSION_SUFFIX: .${{ steps.commit-timestamp.outputs.result }} | |
- name: IntelliJ Platform Plugin Verifier | |
uses: ChrisCarini/[email protected] | |
with: | |
plugin-location: 'target/RubyRefactorings-*.zip' | |
failure-levels: | | |
COMPATIBILITY_WARNINGS | |
COMPATIBILITY_PROBLEMS | |
DEPRECATED_API_USAGES | |
PLUGIN_STRUCTURE_WARNINGS | |
MISSING_DEPENDENCIES | |
INVALID_PLUGIN | |
NOT_DYNAMIC | |
ide-versions: | | |
ideaIU:2024.2 | |
ideaIU:LATEST-EAP-SNAPSHOT | |
- name: Publish nightly release | |
if: github.ref == 'refs/heads/main' | |
uses: actions/github-script@v6 | |
id: publish-nightly-release | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require("fs"); | |
// Get current nightly release | |
const currentNightlyRelease = await github.rest.repos.getReleaseByTag({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag: 'nightly', | |
}); | |
// Remove current assets | |
for (const asset of currentNightlyRelease.data.assets) { | |
await github.rest.repos.deleteReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
asset_id: asset.id, | |
}); | |
} | |
// Upload updated assets | |
const assetsToUpload = fs.readdirSync('target/') | |
.filter(relativePath => relativePath.endsWith('.zip') || relativePath.endsWith('.xml')); | |
for (const assetName of assetsToUpload) { | |
const assetPath = `target/${assetName}` | |
const uploadAssetResponse = await github.rest.repos.uploadReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: currentNightlyRelease.data.id, | |
name: assetName, | |
headers: { | |
'content-type': assetPath.endsWith('.xml') ? 'text/xml' : 'application/zip', | |
'content-length': fs.statSync(assetPath).size, | |
}, | |
data: fs.readFileSync(assetPath), | |
}) | |
} | |
- name: Tag latest commit as nightly and cleanup | |
if: github.ref == 'refs/heads/main' | |
run: | | |
git tag -f nightly | |
git push "https://${GITHUB_ACTOR}:${REPO_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" --tags -f | |
rm target/*.zip | |
env: | |
REPO_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Package for release and tag commit | |
if: github.ref == 'refs/heads/main' && startsWith(github.event.head_commit.message, '[Release]') | |
id: package-for-release | |
run: | | |
sbt packageArtifactZip | |
PLUGIN_VERSION=$(ls target | grep "RubyRefactorings-.*.zip" | grep -oE [0-9]+\.[0-9]+\.[0-9]+) | |
echo "Creating git tag v$PLUGIN_VERSION..." | |
git tag -f v$PLUGIN_VERSION | |
echo "Pushing tag..." | |
git push "https://${GITHUB_ACTOR}:${REPO_TOKEN}@github.com/${GITHUB_REPOSITORY}.git" --tags | |
echo "Running generateUpdatePluginsXml..." | |
sbt "generateUpdatePluginsXml https://github.com/$GITHUB_REPOSITORY/releases/download/v$PLUGIN_VERSION/" | |
printf "v$PLUGIN_VERSION" > releaseTag | |
- name: Create Github release | |
if: github.ref == 'refs/heads/main' && startsWith(github.event.head_commit.message, '[Release]') | |
uses: actions/github-script@v6 | |
id: create-github-release | |
with: | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
script: | | |
const fs = require("fs"); | |
// Create new release | |
const releaseTag = fs.readFileSync('releaseTag', 'utf8') | |
const newRelease = await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag_name: releaseTag, | |
name: `Release ${releaseTag}`, | |
body: fs.readFileSync('CHANGELOG.md', 'utf8'), | |
}); | |
// Upload assets | |
const assetsToUpload = fs.readdirSync('target/') | |
.filter(relativePath => relativePath.endsWith('.zip') || relativePath.endsWith('.xml')); | |
for (const assetName of assetsToUpload) { | |
const assetPath = `target/${assetName}` | |
const uploadAssetResponse = await github.rest.repos.uploadReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: newRelease.data.id, | |
name: assetName, | |
headers: { | |
'content-type': assetPath.endsWith('.xml') ? 'text/xml' : 'application/zip', | |
'content-length': fs.statSync(assetPath).size, | |
}, | |
data: fs.readFileSync(assetPath), | |
}) | |
} | |
- name: Publish release | |
if: github.ref == 'refs/heads/main' && startsWith(github.event.head_commit.message, '[Release]') | |
run: sbt publishPlugin | |
env: | |
IJ_PLUGIN_REPO_TOKEN: ${{ secrets.IJ_PLUGIN_REPO_TOKEN }} |