ci: don't hide or ignore any commit types, at least bump the patch version if

new commits are detected by release.yml
This commit is contained in:
badblocks 2025-08-14 20:35:26 -07:00
parent 12e06902eb
commit 185dc5f662
No known key found for this signature in database
2 changed files with 46 additions and 47 deletions

View file

@ -14,7 +14,7 @@
{ "type": "ci", "section": "CI/CD" }, { "type": "ci", "section": "CI/CD" },
{ "type": "docs", "section": "Documentation" }, { "type": "docs", "section": "Documentation" },
{ "type": "refactor", "section": "Refactor" }, { "type": "refactor", "section": "Refactor" },
{ "type": "chore", "hidden": true } { "type": "chore", "section": "Chores" }
] ]
}, },
"plugins": [ "plugins": [
@ -31,11 +31,11 @@
{ "type": "deps", "release": "minor" }, { "type": "deps", "release": "minor" },
{ "type": "new", "release": "minor" }, { "type": "new", "release": "minor" },
{ "type": "fix", "release": "patch" }, { "type": "fix", "release": "patch" },
{ "type": "build", "release": false }, { "type": "build", "release": "patch" },
{ "type": "ci", "release": false }, { "type": "ci", "release": "patch" },
{ "type": "chore", "release": false }, { "type": "chore", "release": "patch" },
{ "type": "docs", "release": false }, { "type": "docs", "release": "patch" },
{ "type": "refactor", "release": false } { "type": "refactor", "release": "patch" }
] ]
} }
], ],

View file

@ -5,12 +5,12 @@ A sweet little portfolio site with some absolutely ridiculous SMS shenanigans bu
## ✨ The Good Stuff ## ✨ The Good Stuff
- 🌙 **Night mode everything** - DaisyUI components that won't burn your eyeballs - 🌙 **Night mode everything** - DaisyUI components that won't burn your eyeballs
- 📱 **SMS contact form** - Because I get wayyy too many emails already - 📱 **SMS contact form** - Because I get wayyyyy too many emails already
- 🎭 **Snazzy animations** - ScrollReveal + Typed.js doing their thang - 🎭 **Snazzy animations** - ScrollReveal, Typed.js, and more doing their thang
- 🐳 **Zero-downtime deploys** - Blue-green magic with Docker & HAProxy - 🐳 **Zero-downtime deploys** - Blue-green magic with Docker & HAProxy
- 🔧 **Overengineered infrastructure** - We like to do things the hard way over here - 🔧 **Overengineered infrastructure** - If you didn't spend a week working on a fun but useless feature that will never be used, did you really do any development?
## 🏃‍♂️ Getting Started ## 🏃‍♂️ Wanna Try It Out?
```bash ```bash
# Grab the dependencies # Grab the dependencies
@ -38,9 +38,9 @@ bun run generate
## 📞 Contact Form Wizardry ## 📞 Contact Form Wizardry
Two-step verification dance: drop your message → prove you're human with SMS → message gets yeeted to my phone via some questionable infrastructure choices. Two-step verification anti-abuse dance: drop your message → prove you're human with SMS → message gets yeeted to my phone via some very questionable infrastructure choices!
Rate-limited because spam just sucksssss! 🛡️ Rate-limited because spam just sucks!
## 🏗️ Infrastructure Tomfoolery ## 🏗️ Infrastructure Tomfoolery
@ -57,8 +57,8 @@ Here's where things get ~completely~ unhinged:
I'm running the `android-sms-gateway` app on a completely deranged setup: I'm running the `android-sms-gateway` app on a completely deranged setup:
- **Hardware:** Pixel 1 with the battery surgically removed (no spicy pillows please) - **Hardware:** Pixel 1 with the battery surgically removed (no spicy pillows please)
- **Power:** Permanently plugged into the wall like some kind of cursed landline - **Power:** Permanently plugged into the wall like some kind of cursed landline
- **Network:** Hardwired ethernet via USB-C adapter ("WhyFight" with WiFi?) - **Network:** Hardwired ethernet via attached USB hub (WhyFight with WiFi?)
- **Purpose:** Sits there 24/7 just waiting to send OTPs and forward your messages to my actual phone - **Purpose:** Sits there patiently 24/7 just waiting to send OTPs and forward your messages to my actual phone
The whole contraption lives on my home network and the VPS reaches it through a WireGuard tunnel because apparently I enjoy making simple things complicated just to save $2 a month! The whole contraption lives on my home network and the VPS reaches it through a WireGuard tunnel because apparently I enjoy making simple things complicated just to save $2 a month!
@ -67,84 +67,83 @@ The whole contraption lives on my home network and the VPS reaches it through a
This repo follows a three-branch strategy with some absolutely bonkers automated promotions because manually managing branches is for chumps: This repo follows a three-branch strategy with some absolutely bonkers automated promotions because manually managing branches is for chumps:
- **`dev`** - Where the magic happens! All new features and fixes go here - **`dev`** - Where the magic happens! All new features and fixes go here
- **`staging`** - Integration testing playground, auto-promoted from dev daily at 13:00 UTC via scheduler - **`staging`** - Integration testing playground, auto-promoted from dev daily at 04:00 PST via scheduler
- **`main`** - Production branch, gets promoted from staging weekly on Sundays at 14:00 UTC via scheduler - **`main`** - Production branch, gets promoted from staging weekly on Sundays at 05:00 PST via scheduler
### The Repository Setup ### The Repository Setup
We're running a bit of a funky setup here: It's a bit of a funky setup here:
- **Primary repo:** Git origin (configurable - can be self-hosted, GitHub, etc.) - **Primary repo:** My Forgejo server (I obviously like self-hosting things)
- **GitHub Mirror:** Optional push-only mirror for CI/CD and visibility - **GitHub Mirror:** Forgejo repo configured to push-only mirror to Github for CI/CD and visibility
- **CI/CD:** GitHub Actions (triggered by pushes or scheduled workflows) - **CI/CD:** GitHub Actions (triggered by pushes or scheduled workflows)
So the workflow is: push to Git origin → (optional mirror to GitHub) → GitHub Actions does the heavy lifting. So the workflow is: do some coding, commit and push to my Forgejo instance → mirror to GitHub → GitHub Actions does the heavy lifting so my little VPS doesn't have to suffer so much.
### Branch Promotion Dance 💃 ### Branch Promotion Dance 💃
**Daily (dev → staging):** **Daily (dev → staging):**
- Robot overlord wakes up at 13:00 UTC every day - Wannabe robot overlord wakes up at 04:00 PST every day
- Checks if dev has new commits (because we're not animals) - Checks if dev has new commits (because we're not doing all this work for nothing!)
- Actually validates the build passed via GitHub API (fancy!) - Actually validates the build passed via GitHub API (fancy!)
- Fast-forward merge to staging (keeps git history from becoming spaghetti) - Fast-forward merge to staging (keeps git history from becoming spaghetti)
- Supports `[skip ci]` in commit messages for when you inevitably break something
- Manual "YOLO deploy anyway" button available - Manual "YOLO deploy anyway" button available
**Weekly (staging → main):** **Weekly (staging → main):**
- Sunday funday at 14:00 UTC for production releases - Sunday funday at 05:00 PST for production releases
- Runs semantic-release for proper versioning (we're not completely chaotic) - Runs semantic-release for proper versioning (we're not completely chaotic)
- Some gnarly branch gymnastics to keep everything synchronized - Seduce the GitHub API with a token for build status
- SSH-signed commits because we pretend to care about security - SSH-signed commits because I <3 cryptography
- Manual panic button also available - Manual panic button also available
### 🤖 The 5-Workflow CI/CD Circus ### 🤖 The 5-Workflow CI/CD Circus
Because apparently one workflow wasn't enough, we've got a whole circus of automation: Because apparently one workflow is never enough, I've got a whole collection of automations:
1. **`build.yml`** - The overachiever that builds everything 1. **`build.yml`** - The overachiever that builds everything and gets good grades
- Gets triggered by basically anything that moves - Gets triggered by basically anything that moves
- Smart enough to skip builds when we already did the work (lazy efficiency!) - Smart enough to skip builds when we already did the work (lazy!)
- Hoards artifacts for 2 days like a digital packrat - Hoards artifacts for 30 days like a digital packrat
- Has more caching layers than a wedding cake - Has more caching layers than an onion-flavored wedding cake
2. **`deploy.yml`** - The deployment minion (does what it's told) 2. **`deploy.yml`** - The deployment minion (does what it's told)
- Gets bossed around by the other workflows - Gets bossed around by the other workflows
- Juggles blue-green deployments without dropping anything - Juggles blue-green deployments without dropping anything
- Speaks fluent SSH and WireGuard - Speaks fluent SSH and WireGuard
- Downloads artifacts faster than you can say "containerization" - Downloads artifacts faster than you can say "docker load"
3. **`stage.yml`** - The daily grind automation 3. **`stage.yml`** - The daily grind automation
- Wakes up every day to promote dev → staging - Wakes up every day to promote dev → staging
- Actually checks if builds passed (responsible adult behavior) - Actually checks if builds passed (responsible adult behavior)
- Signs commits with SSH keys because we're fancy like that - Signs commits with SSH keys because I'm fancy like that
- Has a "force" option for when things go sideways - Has a "force" option for when things go sideways
4. **`release.yml`** - The weekly release party host 4. **`release.yml`** - The weekly release partayyyy
- Shows up every Sunday with semantic versioning - Shows up every Sunday with semantic versioning
- Does some serious git branch yoga to keep everything aligned - Does some serious git branch yoga to keep everything aligned
- Maintains that linear history we all pretend to care about - Maintains that linear history we all pretend to care about but never look at
5. **`scheduler-*.yml`** - The workflow orchestrators 5. **`scheduler-*.yml`** - The workflow orchestrators
- Exists because GitHub has weird scheduling quirks - Exists because GitHub has weird scheduling quirks
- Makes sure the right code runs from the right branch - Makes sure the workflow runs from the right branch
- Basically the puppet masters of this whole operation - Basically the puppet masters of this whole operation
## 🚢 Deployment Shenanigans ## 🚢 Deployment Shenanigans
Pushes to `staging` or `main` branches trigger some absolutely wild blue-green deployment wizardry with more caching than your browser history! Pushes to `staging` or `main` branches trigger some absolutely wild blue-green deployment wizardry with more caching than your browser!
### Blue-Green Magic ✨ ### Blue-Green Magic ✨
1. **Build Phase:** Smart enough to skip rebuilding stuff we already built (because efficiency is sexy) 1. **Build Phase:** Smart enough to skip rebuilding stuff we already built (because efficiency is sexy)
2. **Deploy Phase:** Download cached goodies and poke the new containers to make sure they're alive 3. **Configure Phase:** Update HAProxy's config, then call it's cell phone and SIG_HUP!
3. **Switch Phase:** HAProxy does the old switcheroo faster than a shell game 3. **Deploy Phase:** Download cached goodies and poke the new containers to make sure they're alive
4. **Cleanup Phase:** Yeet the old containers into the digital void 4. **Cleanup Phase:** Yeet the old containers into the great /dev/null
5. **Artifact Hoarding:** Keeps build artifacts for 30 days like a digital packrat with commitment issues 5. **Artifact Hoarding:** Keeps old build artifacts much longer than you'd ever need (30 days)
6. **Moon Phases:** 🌑 🌒 🌓 🌔 🌝 🌖 🌗 🌘 🌚 (for spiritual alignment) 6. **Moon Phases:** 🌑 🌒 🌓 🌔 🌝 🌖 🌗 🌘 🌚
### GitHub Secrets Setup ### GitHub Secrets/.env Setup
Deployments generate the needed .env from GitHub secrets, so make sure to slap some secrets up first! Deployments generate the needed .env from GitHub secrets, so make sure to slap some secrets up first or copy the .env.example file and edit!
### WireGuard Setup ### WireGuard Setup
The stack is rocking gluetun, so just set up your WIREGUARD_ environment variables in Github secrets: The stack is rocking the popular [gluetun](https://github.com/qdm12/gluetun) container, so just set up your WIREGUARD_ environment variables with your Github secrets!
## 🔒 Security Fortress ## 🔒 Security Fortress
@ -153,7 +152,7 @@ The stack is rocking gluetun, so just set up your WIREGUARD_ environment variabl
- 🔢 TOTP phone verification + rate limiting - 🔢 TOTP phone verification + rate limiting
- 🔤 ASCII-only validation (No spammy weird characters please!) - 🔤 ASCII-only validation (No spammy weird characters please!)
## 🆘 When Things Go Wrong ## 🆘 Note to Self: When Things Go Wrong
```bash ```bash
# Check if containers are actually alive # Check if containers are actually alive
@ -187,4 +186,4 @@ This project is licensed under **AGPL 3.0 only** - see the [LICENSE](LICENSE) fi
--- ---
*Built with ❤️ and lots of ☕! (Sheesh, if you've read this far, just hire me, please!)* *Built with ❤️ and lots of ☕! (Wow, if you've read this far, and you're hiring, just hire me!)*