From 39eb768b3f52a1f69532a369dc1b7e529a35f323 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:48:53 +0000 Subject: [PATCH 1/5] Initial plan From 928011145f0b0df76e20c8ec8a40099f4e686858 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 13:52:42 +0000 Subject: [PATCH 2/5] Add CHANGELOG.md for version 0.1.0 Co-authored-by: cdanis <1160935+cdanis@users.noreply.github.com> --- CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 CHANGELOG.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..7472cec --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,34 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [0.1.0] - 2026-01-12 + +### Added +- Initial release of Odette - Event invitation and RSVP management system +- Token-based RSVP system with unique links for each guest +- Event management with date, location, description, and banner images +- Email invitation sending via Gmail SMTP with nodemailer +- Party size tracking for attendees +- Primary email + CC email addresses support for each attendee +- Batch import features: + - Parse attendees from email headers + - Upload CSV/TSV files + - Copy attendees from other events +- Admin dashboard for event and attendee management +- ICS calendar file download for guests +- Timezone support using IANA timezone identifiers +- Push notifications via ntfy.sh for RSVP responses +- SQLite database with automatic runtime migrations +- Mobile and desktop responsive UI using PicoCSS +- Docker support with automatic image builds +- GitHub Actions CI/CD pipeline for testing and releases +- Comprehensive test suite with Jest +- TypeScript implementation with Express.js +- EJS server-side rendering +- No built-in authentication (designed for reverse proxy auth) + +[0.1.0]: https://github.com/cdanis/odette/releases/tag/v0.1.0 From 3cac642e11b3eac18f0b43edc2f4e63274dd5d51 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:04:38 +0000 Subject: [PATCH 3/5] Simplify CHANGELOG.md to single-line initial release entry Co-authored-by: cdanis <1160935+cdanis@users.noreply.github.com> --- CHANGELOG.md | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7472cec..d719944 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,26 +9,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Initial release of Odette - Event invitation and RSVP management system -- Token-based RSVP system with unique links for each guest -- Event management with date, location, description, and banner images -- Email invitation sending via Gmail SMTP with nodemailer -- Party size tracking for attendees -- Primary email + CC email addresses support for each attendee -- Batch import features: - - Parse attendees from email headers - - Upload CSV/TSV files - - Copy attendees from other events -- Admin dashboard for event and attendee management -- ICS calendar file download for guests -- Timezone support using IANA timezone identifiers -- Push notifications via ntfy.sh for RSVP responses -- SQLite database with automatic runtime migrations -- Mobile and desktop responsive UI using PicoCSS -- Docker support with automatic image builds -- GitHub Actions CI/CD pipeline for testing and releases -- Comprehensive test suite with Jest -- TypeScript implementation with Express.js -- EJS server-side rendering -- No built-in authentication (designed for reverse proxy auth) [0.1.0]: https://github.com/cdanis/odette/releases/tag/v0.1.0 From 7a80e311aa9243c3e9690212b51db43cff848460 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:11:17 +0000 Subject: [PATCH 4/5] Add GitHub Action to create release tag from package.json version Co-authored-by: cdanis <1160935+cdanis@users.noreply.github.com> --- .github/workflows/create-release-tag.yml | 56 ++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 .github/workflows/create-release-tag.yml diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml new file mode 100644 index 0000000..33dca6f --- /dev/null +++ b/.github/workflows/create-release-tag.yml @@ -0,0 +1,56 @@ +name: Create Release Tag + +on: + workflow_dispatch: # Allows manual triggering from GitHub UI + +jobs: + create-tag: + runs-on: ubuntu-latest + permissions: + contents: write + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch all history for tags + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '22.x' + + - name: Extract version from package.json + id: package-version + run: | + VERSION=$(node -p "require('./package.json').version") + echo "version=$VERSION" >> $GITHUB_OUTPUT + echo "tag=v$VERSION" >> $GITHUB_OUTPUT + echo "Extracted version: $VERSION" + echo "Tag will be: v$VERSION" + + - name: Check if tag exists + id: check-tag + run: | + if git rev-parse "v${{ steps.package-version.outputs.version }}" >/dev/null 2>&1; then + echo "exists=true" >> $GITHUB_OUTPUT + echo "Tag v${{ steps.package-version.outputs.version }} already exists" + else + echo "exists=false" >> $GITHUB_OUTPUT + echo "Tag v${{ steps.package-version.outputs.version }} does not exist" + fi + + - name: Create and push tag + if: steps.check-tag.outputs.exists == 'false' + run: | + git config user.name "github-actions[bot]" + git config user.email "github-actions[bot]@users.noreply.github.com" + git tag -a "${{ steps.package-version.outputs.tag }}" -m "Release ${{ steps.package-version.outputs.tag }}" + git push origin "${{ steps.package-version.outputs.tag }}" + echo "Created and pushed tag ${{ steps.package-version.outputs.tag }}" + + - name: Tag already exists + if: steps.check-tag.outputs.exists == 'true' + run: | + echo "Tag ${{ steps.package-version.outputs.tag }} already exists. Skipping tag creation." + exit 1 From 3cbc9df0fbf33057f56857536c34a4f36378a5c2 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 12 Jan 2026 14:13:20 +0000 Subject: [PATCH 5/5] Improve create-release-tag workflow error handling Co-authored-by: cdanis <1160935+cdanis@users.noreply.github.com> --- .github/workflows/create-release-tag.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/create-release-tag.yml b/.github/workflows/create-release-tag.yml index 33dca6f..43fe73b 100644 --- a/.github/workflows/create-release-tag.yml +++ b/.github/workflows/create-release-tag.yml @@ -23,7 +23,15 @@ jobs: - name: Extract version from package.json id: package-version run: | + if [ ! -f package.json ]; then + echo "Error: package.json not found" + exit 1 + fi VERSION=$(node -p "require('./package.json').version") + if [ -z "$VERSION" ] || [ "$VERSION" = "undefined" ]; then + echo "Error: version field not found in package.json" + exit 1 + fi echo "version=$VERSION" >> $GITHUB_OUTPUT echo "tag=v$VERSION" >> $GITHUB_OUTPUT echo "Extracted version: $VERSION" @@ -53,4 +61,4 @@ jobs: if: steps.check-tag.outputs.exists == 'true' run: | echo "Tag ${{ steps.package-version.outputs.tag }} already exists. Skipping tag creation." - exit 1 + echo "The release workflow may have already been triggered for this version."