Values-based grouping

I just watched this TED talk about the end of globalization and where it goes from here.

I don’t fully agree with it – some of the statements are generalizing and simplistic. However, it raised some interesting thoughts.

For the last few decades, globalization has seen a blurring of borders, many times based on geographical proximity. Some examples I could immediately think of include the European Union, North America (in the context of NAFTA), ASEAN etc. There are probably many other, though I’m not as familiar.

What if in the future, we see more blocs coming together of alliances based on value systems instead of geographical attributes? Systems that would include economic policies, population size, diplomatic outlook, technology, human rights advocacy or abuse etc. Are there examples of such grouping already in existence?

Firestore backup with GitHub Actions

I needed a way to perform automated backup for my GCP Firestore database. I found out that Firestore has Import/ Export functionality, and it seems to be the recommended way to do backup. So I created a simple GitHub Actions workflow to do this:

name: Firestore backup
			
			on:
			  workflow_dispatch:
			  schedule:
			    - cron: "0 19 * * *"
			
			jobs:
			  backup:
			    runs-on: ubuntu-latest
			
			    steps:
			      - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
			        with:
			          service_account_email: '<service-account-name>@<project-id>.iam.gserviceaccount.com'
			          service_account_key: ${{ secrets.SA_KEY }}
			          project_id: '<project-id>'
			
			      - name: Backup
			        run: |-
			          gcloud components install beta
			          gcloud beta firestore export gs://<storage-bucket-id>


This workflow can be triggered in 2 ways, manually (due to workflow_dispatch trigger), or on a schedule (cron syntax).

The first step set up and authenticate the gcloud cli. The second step triggers to export action on GCP.
Currently firestore export is only available on gcloud beta, so an installation step of the beta component is needed.

The cloud storage bucket would need to be created beforehand. I created mine with the NEARLINE storage class to save on some cost.

“Affluence without abundance” – James Suzman

This was the first book I read in 2020, and the first book I’ve actually read from start to finish in many years. I picked it up hoping to hear some philosophical wisdom on human happiness, or social commentary on the state of Western late-stage capitalism and obsessive consumerism culture. In hindsight, perhaps I was seeking for some form of validation of my own personal feelings.

Needless to say, I found none of that in the book. Instead, it was an incredibly rich description of life in Southern Africa. It was a good reminder how humans lived as hunters and gatherers for hundreds of thousand of years where they only take as much as they needed for a few days at a time from their surroundings. While there were lean periods, in general they do not spend more than 15-20 hours a week in the pursuit of sustenance. Land rights are one of the many modern concepts that upended that way of life, even though it has been around for much longer than what we think of “modern” human history, whether you measure that in thousand of years, or hundred of years since the industrial revolution. One could argue that where we are today is an inevitable destination of the human psychological evolution journey, and I certainly don’t have the knowledge or insight to affirm or deny that. Nonetheless, it was interesting to be presented with the incredible research and understanding on how life was and how it has been drastically altered in the course of recent human history.

CI/CD pipeline comparison – Jenkins vs. GitHub Actions

I’ve been asked recently whether I would use Jenkins or GitHub Actions to create a CI pipeline for a web app project. This got me thinking a bit, as it’s a comparison I’ve often thought about but never had to make a decision on.

I’m fully aware of the multitudes of caveats and “it depends” of such a vague premise. There are also multiple other hosted services as well as open source projects to choose from, such as GitLab CI, Circle CI, Azure DevOps, to name a few. There are also stack-specific tools to choose from, such as Netlify, Vercel, or the various tools in the Kubernetes space. It’s unrealistic for me to do a comprehensive comparison, or experience them all.

I just want to note down some thoughts after having some experience using these two systems. YMMV.

Jenkins

If you work in an “enterprise”, or a big team with a variety of different tech stacks, it might be worthwhile to invest the time and effort into maintaining your own Jenkins server, or look into a hosted offering.

It’s a tried and true option, with tons of resources and support, and is infinitely extensible. The new style of Declarative Pipeline has made reading and maintaining Jenkins pipeline more enjoyable, while the ability to embed Groovy script into your pipeline makes it very flexible.

Another benefit is a fairly complex permissions and security model, with support for RBAC and secrets management.

GitHub Actions

While Jenkins has been around forever, GA is the shiny new toy. Its biggest advantage is perhaps its beautiful UI integrated directly into where your code lives. It takes away the burden of maintaining a separate system to test and build your code.

This might be a bit controversial, but I am not too fond of the yaml syntax chosen. While it’s very popular in certain circles, I find it limiting when you want to do some highly customized logic, which I’ve found to be pretty common in a build pipeline.

Similar to Jenkins extensible plugin model, GA also allows you to reuse code, which is pretty cool and powerful. Sometimes trying to incorporate these shared actions can feel a bit awkward.

What to choose

As I started to write down some of these thoughts, I realized that there are just too many factors to consider here. I could write several posts discussing each of these topics in details. But that might not be too useful for anyone.

My general opinion is, if you’re already using GitHub, then spend a couple days building out GitHub Actions workflow. If you can get it to work and do everything you need, consider it a win! I think it will require the least amount of maintenance going forward, and thus will be a higher return on investment.

If you find yourself struggling with it too much, then don’t be afraid to spin up a Jenkins server. There’s a pretty good chance you’ll be able to get it to do exactly what you need.

If you have other thoughts and opinions, feel free to reach out and have a conversation. I spend a good amount of my time building pipelines, and am always looking to learn more.