DevOps

Automatisering af mobiludgivelse — Flutter CI/CD, on-device acceptancetest, udgivelse til Google Play og App Store

Mit Håndværk udgiver sig selv i to app stores — og en rigtig telefon har vetoret

Mit Håndværk er en dansk markedsplads-app for håndværk, kunst og design — en Flutter-app på Android og iOS oven på en Laravel-backend, med abonnementer, realtidschat og push. Denne case handler ikke om appens skærme. Den handler om maskineriet, der sætter en ny version af den foran brugerne: en pipeline, der tager et commit på main og cirka ti minutter senere har udgivet det til Google Play production — men kun efter at releasen er blevet installeret og koldstartet på en rigtig Android-enhed og har overlevet det.

Samme pipeline dækker Apple fra en Linux-server, der slet ikke kan bygge iOS: et release-tag overdrager buildet til en cloud-macOS-maskine, som signerer det og uploader det til TestFlight — og selve tagget kan ikke pushes, medmindre appens abonnementer faktisk er godkendt og prissat i App Store Connect.

Alt i billedet ovenfor er aflæst af det kørende system: tællerne kommer ud af pipelinens egen log, og telefonpanelet er det screenshot, publiceringsgaten trækker af emulatoren ved hver eneste release.

Mit Håndværk — dansk markedsplads-app for håndværk, kunst og design (mithaandvaerk.dk); Flutter på Android og iOS, Laravel-backend

Vedligeholdelsesautomatisering / DevOps

Den kedelige superkraft: en ugentlig gate, der holder tolv sites' dependencies opdaterede

Tolv produktionswebsites på én server, hver med sit eget Composer-dependency-træ, og hostingens ældste spørgsmål: er de opdaterede — og er det sikkert at opdatere dem? Dependency-aktualitets-gaten svarer ugentligt og automatisk — den inventerer hver vhost, tjekker hvert dependency-træ mod den PHP-version, sitets webserver faktisk kører, sætter de semver-sikre opdateringer i kø til godkendelse og rapporterer de breaking i stedet for at anvende dem.

GrN.dk — serverflåde (12 produktions-vhosts)