If your project is on GitHub, GitHub Actions are a great built in way to have an automated Continuous Integration (CI) setup where the configuration is committed to the same repository where your project lives.
GitHub Actions are also very cost effective thanks to the generous free minutes allowance and additional 3000 /month minutes with every paid team member.
To make taking advantage of GitHub Actions with your ServiceStack applications, we've created multiple mix templates to setup your CI process quickly. Most Project Templates provide a build + test step on every commit as well as combinations of Docker image hosting and application deployments focusing on portability.
Since hosting architectures vary so much, these templates are designed to get you started with a simple setup where you can iterate quickly as you develop application. As hosting requirements change, the deployment GitHub Action workflow
yml files can be customized to suit.
release-ghr-vanilla where ghr uses GitHub for the Docker Repository and
vanilla for our minimalist deployment that uses SSH and docker compose.
GitHub Action Templates
Templates currently available are:
|Name||Docker Repository||Deployment and Hosting|
|release-ghr-vanilla||GitHub Container Repository||SSH + docker compose|
|release-ecr-vanilla||AWS Elastic Container Repository||SSH + docker compose|
|release-hub-vanilla||Docker Hub||SSH + docker compose|
|release-ecr-aws||AWS Elastic Container Repository||AWS ECS without Load Balancer|
Using GitHub Container Repository (ghcr.io) and deploying to a Linux host with
docker compose via SSH, this provides a GitHub centric option for prototyping your application. A full tutorial using Digital Ocean as our Linux host provider is available as well as an accompanying video.
Using AWS ECR (Elastic Container Repository) and deploying to a Linux host with
docker compose via SSH, this provides a portable simple hosting with AWS ECR for those already in the AWS cloud provider environment.
Using the original Docker Hub as a Docker image repository and deploying to a Linux host with
docker compose via SSH, this might be more suited to those with existing use of Docker Hub or public application images.
Using AWS ECR (Elastic Container Repository) and deploying via AWS ECS to a dedicated ECS cluster with a single EC2 instance, this template enables a gateway into using AWS ECS without the regular cost of an Application Load Balancer (ALB). Like the other templates, this uses NGINX proxy with Lets Encrypt companion in place of AWS specific managed services to do the same. This will give you a starting point for your prototype until you have the need for scalability and high availability for your application.
We have a full tutorial along with a video walk through available, showing from start to finish getting your ServiceStack application created and deploying via GitHub Actions and ECS.
For a detailed overview for creating and setting up deployment for a new Blazor Litestream App from scratch checkout:
If you are using the template GitHub Actions and deploying to an Ubuntu 22.04 server, ensure you ssh key is generated using non RSA SHA1 algorithm. Eg
ssh-keygen -t ecdsa or swap out the use of
firstname.lastname@example.org for your own step using the latest version of the
scp command line tool in your CI environment. For a step by step and other options, see this Ask Ubuntu Answer