Skip to content

fix: Fix Update CHANGELOG script #67

fix: Fix Update CHANGELOG script

fix: Fix Update CHANGELOG script #67

Workflow file for this run

name: Create Release
on:
push:
branches:
- main
- dev
workflow_dispatch:
permissions:
contents: write
jobs:
release:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- name: Set up Lua
env:
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
uses: leafo/gh-actions-lua@v2
with:
luaVersion: "5.1"
- name: Set up LuaRocks
uses: leafo/gh-actions-luarocks@v4
- name: Install dependencies for Lua
run: luarocks install busted
- name: Run Lua tests
run: |
if [ -d "spec" ]; then
busted
elif [ -d "tests" ]; then
busted tests
else
echo "No test directory found. Creating a sample test."
mkdir -p spec
echo "describe('Sample test', function() it('should pass', function() assert.is_true(true) end) end)" > spec/sample_spec.lua
busted
fi
- name: Set up Neovim
run: |
sudo add-apt-repository ppa:neovim-ppa/unstable -y
sudo apt-get update
sudo apt-get install -y neovim
- name: Set up Neovim configuration
run: |
mkdir -p ~/.config/nvim
echo 'require("lazy").setup({' > ~/.config/nvim/init.lua
echo ' "nvim-treesitter/nvim-treesitter",' >> ~/.config/nvim/init.lua
echo ' "nvim-lua/plenary.nvim",' >> ~/.config/nvim/init.lua
echo ' "lewis6991/gitsigns.nvim",' >> ~/.config/nvim/init.lua
echo '})' >> ~/.config/nvim/init.lua
nvim --headless -c 'quitall'
- name: Test horizontal scrolling
run: |
nvim --headless +'lua require("typewriter").setup({ enable_horizontal_scroll = true })' +'autocmd BufEnter * normal! zt' +'qall'
- name: Set up Lua environment
run: echo "${{ github.workspace }}/.lua/bin" >> $GITHUB_PATH
- name: Verify Lua installation
run: lua -v
- name: Determine next version
id: determine_version
run: |
git fetch --tags
LATEST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo 'v0.0.0')
echo "LATEST_TAG=${LATEST_TAG}" >> $GITHUB_OUTPUT
git log ${LATEST_TAG}..HEAD --pretty=format:%s > commits.txt
if grep -q '^BREAKING CHANGE:' commits.txt || grep -q '^[a-zA-Z]\+!:' commits.txt; then
BUMP="major"
elif grep -q '^feat:' commits.txt; then
BUMP="minor"
else
BUMP="patch"
fi
echo "BUMP=${BUMP}" >> $GITHUB_OUTPUT
LATEST_VERSION=${LATEST_TAG#v}
IFS='.' read -ra VERSION_PARTS <<< "$LATEST_VERSION"
MAJOR=${VERSION_PARTS[0]:-0}
MINOR=${VERSION_PARTS[1]:-0}
PATCH=${VERSION_PARTS[2]:-0}
case $BUMP in
major)
NEW_VERSION="$((MAJOR + 1)).0.0"
;;
minor)
NEW_VERSION="${MAJOR}.$((MINOR + 1)).0"
;;
patch)
NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH + 1))"
;;
esac
echo "NEW_VERSION=v${NEW_VERSION}" >> $GITHUB_OUTPUT
# Check if the calculated version already exists
if git rev-parse v$NEW_VERSION >/dev/null 2>&1; then
echo "Version v$NEW_VERSION already exists. Incrementing patch version."
PATCH=$((PATCH + 1))
NEW_VERSION="${MAJOR}.${MINOR}.${PATCH}"
echo "NEW_VERSION=v${NEW_VERSION}" >> $GITHUB_OUTPUT
fi
- name: Generate Changelog
id: get_changelog
run: |
LATEST_TAG=${{ steps.determine_version.outputs.LATEST_TAG }}
CHANGELOG=$(git log ${LATEST_TAG}..HEAD --pretty=format:"- %s")
echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Update CHANGELOG.md
shell: bash
run: |
# Set execute permissions
chmod +x $GITHUB_WORKSPACE/.github/scripts/update_changelog.sh
# Convert line endings
sed -i 's/\r$//' $GITHUB_WORKSPACE/.github/scripts/update_changelog.sh
# Set variables
NEW_VERSION='${{ steps.determine_version.outputs.NEW_VERSION }}'
CHANGELOG=$(cat << 'EOF'
${{ steps.get_changelog.outputs.CHANGELOG }}
EOF
)
# Run the update changelog script
$GITHUB_WORKSPACE/.github/scripts/update_changelog.sh "$NEW_VERSION" "$CHANGELOG"
- name: Check if release exists
id: check_release
run: |
if git ls-remote --exit-code --tags origin refs/tags/${{ steps.determine_version.outputs.NEW_VERSION }} >/dev/null 2>&1; then
echo "RELEASE_EXISTS=true" >> $GITHUB_OUTPUT
else
echo "RELEASE_EXISTS=false" >> $GITHUB_OUTPUT
fi
- name: Create GitHub Release
if: steps.check_release.outputs.RELEASE_EXISTS == 'false'
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.determine_version.outputs.NEW_VERSION }}
release_name: Release ${{ steps.determine_version.outputs.NEW_VERSION }}
body: |
## Changes in this Release
${{ steps.get_changelog.outputs.CHANGELOG }}
For full changelog, see [CHANGELOG.md](https://github.com/joshuadanpeterson/typewriter.nvim/blob/main/CHANGELOG.md)
## Core Features
- Keeps the cursor centered on the screen while typing or navigating.
- Simple commands to enable, disable, and toggle the typewriter mode.
- Integrates with ZenMode and True Zen for a seamless distraction-free environment.
For more details, please check the [README](https://github.com/joshuadanpeterson/typewriter.nvim/blob/main/README.md).
draft: false
prerelease: false
- name: Update existing release
if: steps.check_release.outputs.RELEASE_EXISTS == 'true'
uses: actions/github-script@v6
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const fs = require('fs');
const { NEW_VERSION } = process.env;
const changelog = fs.readFileSync('CHANGELOG.md', 'utf8');
const releases = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
});
const existingRelease = releases.data.find(release => release.tag_name === NEW_VERSION);
if (existingRelease) {
await github.rest.repos.updateRelease({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: existingRelease.id,
body: `## Changes in this Release\n\n${changelog}\n\nFor full changelog, see [CHANGELOG.md](https://github.com/joshuadanpeterson/typewriter.nvim/blob/main/CHANGELOG.md)\n\n## Core Features\n- Keeps the cursor centered on the screen while typing or navigating.\n- Simple commands to enable, disable, and toggle the typewriter mode.\n- Integrates with ZenMode and True Zen for a seamless distraction-free environment.\n\nFor more details, please check the [README](https://github.com/joshuadanpeterson/typewriter.nvim/blob/main/README.md).`,
});
console.log(`Updated existing release ${NEW_VERSION}`);
} else {
console.log(`Release ${NEW_VERSION} not found`);
}
env:
NEW_VERSION: ${{ steps.determine_version.outputs.NEW_VERSION }}