name: Create new release on: schedule: - cron: '1 0 * * *' # Runs nightly workflow_dispatch: jobs: create-new-release: runs-on: runner-cluster-htl-set permissions: contents: write steps: - name: Checkout code uses: actions/checkout@v4 - name: Parse CHANGELOG.md for yesterday's entries and create a new release env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | YESTERDAY=$(date -u --date="yesterday" +%Y-%m-%d) # Extract the changelog section for YESTERDAY, stopping at the next date awk -v date="## $YESTERDAY" ' $0 ~ date {found=1; print; next} found && /^## [0-9]{4}-[0-9]{2}-[0-9]{2}/ {exit} found {print} ' CHANGELOG.md | sed '/^## [0-9]/d' > changelog_tmp.md echo "=== Extracted Changelog ===" cat changelog_tmp.md echo "===========================" if [ ! -s changelog_tmp.md ]; then echo "No changes found for $YESTERDAY, skipping release." exit 0 fi CHANGELOG_SIZE=$(wc -c < changelog_tmp.md) echo "Changelog size: $CHANGELOG_SIZE bytes" # Crop to first 20,000 characters if too large MAX_SIZE=20000 if [ "$CHANGELOG_SIZE" -gt "$MAX_SIZE" ]; then echo "WARNING: Changelog too large, cropping to first $MAX_SIZE characters..." head -c "$MAX_SIZE" changelog_tmp.md > changelog_cropped.md mv changelog_cropped.md changelog_tmp.md fi echo "Creating GitHub release for $YESTERDAY..." gh release create "$YESTERDAY" -t "$YESTERDAY" -F changelog_tmp.md