In 2016 when I started this site I wrote about the tech stack I chose.
Yesterday I switched from servers to serverless using Gatsby and firebase hosting. Feels good to leave the db and containers behind and have gatsby build a static website whenever I make changes.
With firebase I can review all my changes before promoting them to production (https://donchev.is) How?
No, I dont have seperate projects for dev / prod in firebase. I just use their recently released feature “hosting channels” ;)
Here is how:
firebase --project donchev-is hosting:channel:deploy $(uuidgen) --expires 1h
✔ hosting:channel: Channel URL (donchev-is): https://donchev-is--a5894fa1-1982-49ce-9513-e3135fd2e866-nw2h141t.web.app [expires 2021-03-17 14:25:01]
Now I can view my changes on the newly created channel URL
https://donchev-is--a5894fa1-1982-49ce-9513-e3135fd2e866-nw2h141t.web.app
(will probably be expired by the time you read this)
I can even run UI tests on that link if I am too lazy doing the testing myself, here is how I do it:
"HEADLESS=false WEBSITE=https://donchev-is--a5894fa1-1982-49ce-9513-e3135fd2e866-nw2h141t.web.app yarn test:e2e",
this triggers the e2e tests written with jest-puppeteer
const puppeteer = require('puppeteer')
describe('donchev-is', () => {
beforeAll(async () => {
jest.setTimeout(15000)
const website = process.env.WEBSITE || 'https://donchev.is'
await page.goto(website)
await page.setViewport({ width: 1712, height: 1283 })
})
it('should work :) ', async () => {
// write your e2e tests here
})
})
My new dev workflow goes something like this:
- Check in code
- Run yarn build
- Run yarn deploy:dev (creates a firebase hosting channel that expires in 1h)
- Run WEBSITE=“hostinChannelUrl” yarn test:e2e
- Run yarn deploy:prod
No more servers and no more ansible playbooks for patching my servers ;)