diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 9561b960..46f8b426 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -33,6 +33,89 @@ jobs: github-repo: ${{ github.repository }} github-token: ${{ secrets.GITHUB_TOKEN }} + update-changelog: + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + outputs: + was_updated: ${{ steps.check-change.outputs.change_detected }} + check_commit: ${{ steps.check-changelog.outputs.check_commit }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + fetch-depth: 0 + + - name: Check for updated CHANGELOG.md using git + id: check-changelog + run: | + if git diff --name-only origin/${{ github.base_ref }} | grep -q "^CHANGELOG.md$"; then + echo "CHANGELOG.md has been updated." + echo "::set-output name=check_commit::true" + else + echo "ERROR: CHANGELOG.md has not been updated." + echo "::set-output name=check_commit::false" + fi + - name: Compare PR description with template + if: steps.check-changelog.outputs.check_commit == 'false' + env: + PR_DESCRIPTION: ${{ github.event.pull_request.body }} + run: | + # Safely print the PR description using Node.js + + node -e "const fs=require('fs'); fs.writeFileSync('/tmp/pr_description.txt', process.env.PR_DESCRIPTION);" + # Use diff to compare the two files + if diff -wB /tmp/pr_description.txt .github/pull_request_template.md > /dev/null; then + echo "ERROR: PR description is identical to the template." + exit 1 + else + echo "PR description and template are different." + fi + + - name: Check PR body against changelog + if: steps.check-changelog.outputs.check_commit == 'false' + id: extract-changelog + run: | + result=$(node .github/workflows/set-changelog.js ${{ github.event.pull_request.number }}) + if [ "$result" = "Success" ]; then + git config --global user.email "zowe-robot@users.noreply.github.com" + git config --global user.name "Zowe Robot" + git add CHANGELOG.md + git commit -s -m "Update changelog with PR #${{ github.event.pull_request.number }} description" + git push + echo "Updated CHANGELOG from description" + else + echo $result + echo -e "No changelog and version information found in PR description. Please add them.\nExpected Format:\nVERSION:X.XX.X\nCHANGELOG:This is changelog note.\nTo re-run the action, just make a push or commit after updating the PR description or updating the changelog via a manual file changing commit." + exit 1 + fi + + - name: check for changes + id: check-change + run: | + if git diff --name-only HEAD^ HEAD | grep 'changelog.md'; then + echo "No Changes detected, setting flag to false" + echo "::set-output name=change_detected::false" + else + echo "::set-output name=change_detected::true" + fi + + check_changelog: + if: github.event_name == 'pull_request' + needs: update-changelog + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Verify Changelog update + run: | + if [ "${{ needs.update-changelog.outputs.was_updated }}" != "true" ]; then + echo "CHANGELOG.md not updated, please update CHANGELOG.md with the changes made in the pull request" + exit 1 + else + echo "changelog was updated successfully." + fi build: runs-on: ubuntu-latest needs: check-permission diff --git a/.github/workflows/set-changelog.js b/.github/workflows/set-changelog.js new file mode 100644 index 00000000..fefb0db2 --- /dev/null +++ b/.github/workflows/set-changelog.js @@ -0,0 +1,59 @@ +/* +This program and the accompanying materials are +made available under the terms of the Eclipse Public License v2.0 which accompanies +this distribution, and is available at https://www.eclipse.org/legal/epl-v20.html + +SPDX-License-Identifier: EPL-2.0 + +Copyright Contributors to the Zowe Project. +*/ + +const fs = require('fs'); + +// Must run with args: PR_NUMBER +const PR_NUMBER = process.argv[2]; +const description = fs.readFileSync('/tmp/pr_description.txt', 'utf8'); +let changelogMsg, version; + +if (description.includes('VERSION:') && description.includes('CHANGELOG:')) { + let lines = description.split('\n'); + lines.forEach((line) => { + if (line.startsWith('CHANGELOG:')) { + changelogMsg = line.substring('CHANGELOG:'.length).trim(); + } else if (line.startsWith('VERSION:')) { + version = line.substring('VERSION:'.length).trim(); + } + }); + + if (changelogMsg && version) { + let changelog = fs.readFileSync('CHANGELOG.md', 'utf8'); + let changelogLines = changelog.split('\n'); + let versionIndex = -1; + let anchorIndex = 0; + for (let i = 0; i < changelogLines.length; i++) { + if (changelogLines[i].includes('# Zlux Editor Changelog')) { + anchorIndex = i; + } else if (changelogLines[i].startsWith('## ' + version)) { // Removed "v" prefix + versionIndex = i; + break; + } + } + if (versionIndex != -1) { + changelogLines.splice(versionIndex + 2, 0, `- ${changelogMsg} (#${PR_NUMBER})`); + } else { + changelogLines.splice(anchorIndex + 1, 0, `\n## \`${version}\`\n- ${changelogMsg} (#${PR_NUMBER})`); + } + const newChangelog = changelogLines.join('\n'); + fs.writeFileSync('CHANGELOG.md', newChangelog); + console.log('Success'); + } else { + if (!changelogMsg) { + console.log('Missing CHANGELOG'); + } + if (!version) { + console.log('Missing VERSION'); + } + } +} else { + console.log('Missing CHANGELOG or VERSION'); +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 5dfb4d4e..1ce3dba0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Zlux Editor Changelog ## `3.0.1` + - Bugfix: Added a few rules for JCL syntax highlighter - Bugfix: Set USS path to correct directory, when opening the directory or file in new browser tab respectively - Added the feature to copy the line content and copy URL link to open a file at a specific line @@ -17,6 +18,7 @@ - BugFix: Editor keeps the content of the file, after an opened file is closed. ## `2.9.0` + - Added the feature to update the dataset in the editor - Added the check for e-tag while updating the dataset - Added feature to open a file in new broswer tab @@ -25,6 +27,7 @@ - Added the feature to prompt the user to save the unsaved files before closing ## `2.8.0` + - Bugfix: Fixed error message & phantom tab when opening undefined length dataset - Bugfix: Unable to recalculate the size of monaco-code-container when switching from diff-viewer to code-editor. - Added previously selected content comparison (Diff viewer) diff --git a/manifest.yaml b/manifest.yaml index e6c2c52a..504a49e1 100644 --- a/manifest.yaml +++ b/manifest.yaml @@ -2,7 +2,7 @@ name: editor id: org.zowe.editor # Without the v -version: 2.10.0 +version: 2.18.0 # Human readable component name title: Editor # Human readable component description diff --git a/pluginDefinition.json b/pluginDefinition.json index ac9a52e4..8e6cc7ea 100644 --- a/pluginDefinition.json +++ b/pluginDefinition.json @@ -1,7 +1,7 @@ { "identifier": "org.zowe.editor", "apiVersion": "2.0.0", - "pluginVersion": "2.10.0", + "pluginVersion": "2.18.0", "license": "EPL-2.0", "author": "Zowe", "homepage": "https://github.com/zowe/zlux-editor",