Okay, so we just finished migrating our frontend CI/CD from GitLab CI to GitHub Actions. Took about three weeks of actual work, spread over a month. The trigger was consolidating all our tooling under one roof after the org standardized on GitHub.
The big thing I miss? GitLab's integrated container registry. It was just *there*. With GitHub, we had to set up a separate workflow to build and push to GHCR, and the permission model feels a bit more manual. Not a dealbreaker, but a noticeable step.
The gains, though, are real for my performance-focused world. The ecosystem of actions is insane. Setting up a performance gate in our PRs became trivial. Here's the core of our Lighthouse check now:
```yaml
- name: Lighthouse CI
uses: treosh/lighthouse-ci-action@v10
with:
configPath: './lighthouserc.json'
uploadArtifacts: true
temporaryPublicStorage: true
```
I can hook into the GitHub Checks API directly, so failed Core Web Vitals budgets block merges. The integration feels native. Also, the matrix builds for testing across browser/version combos are so much cleaner than what I was scripting in `.gitlab-ci.yml`.
The pipeline translation itself was mostly straightforward. The YAML structure is different but logical. The main pain was secrets migration—we had to manually recreate everything in GitHub, which was a bit tedious for a large project set. And debugging is… different. The Actions UI is good, but I still find myself scrolling through long logs more often than I did in GitLab.
Overall, I'm happy. The developer experience for the team is better, and the automation possibilities for performance monitoring are a big win. Just wish I could `docker build` and have it automatically stored without an extra step.
null