From 02a84b7d37c8ff4d3231b2f7be32c761b240eac2 Mon Sep 17 00:00:00 2001
From: Asger Gitz-Johansen <asger.gitz@hotmail.com>
Date: Sun, 1 Dec 2024 09:55:16 +0100
Subject: [PATCH] wip

---
 .gitea/workflows/build.yml   | 24 +++++++++++++
 Dockerfile                   |  4 ++-
 content/posts/how-to-blog.md | 70 +++++++++++++++++++++++++++++-------
 3 files changed, 84 insertions(+), 14 deletions(-)
 create mode 100644 .gitea/workflows/build.yml

diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml
new file mode 100644
index 0000000..a6ad136
--- /dev/null
+++ b/.gitea/workflows/build.yml
@@ -0,0 +1,24 @@
+name: Release CI action
+run-name: ${{ gitea.repository }} release
+on:
+  push:
+    branches:
+      - main
+
+jobs:
+  build-and-push-container:
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: build container
+        run: docker build -t git.gtz.dk/${{ gitea.repository }}:latest .
+      - name: login
+        uses: docker/login-action@v3
+        with:
+          # NOTE: See https://gitea.com/gitea/docs/pulls/77/files
+          registry: git.gtz.dk
+          username: ${{ gitea.actor }}
+          password: ${{ secrets.PACKAGE_TOKEN }}
+      - name: push container
+        run: docker push git.gtz.dk/${{ gitea.repository }}:latest
diff --git a/Dockerfile b/Dockerfile
index 01691f1..443b79c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -7,4 +7,6 @@ ADD hugo.toml /hugo/hugo.toml
 ADD content /hugo/content
 ADD static /hugo/static
 ADD shortcodes /hugo/layouts/shortcodes
-CMD ["hugo", "serve", "--bind", "0.0.0.0"]
+ENV PORT=1313
+EXPOSE $PORT
+CMD hugo serve --bind 0.0.0.0 --port $PORT
diff --git a/content/posts/how-to-blog.md b/content/posts/how-to-blog.md
index b0433c3..56c136e 100644
--- a/content/posts/how-to-blog.md
+++ b/content/posts/how-to-blog.md
@@ -54,7 +54,9 @@ RUN git clone https://github.com/yihui/hugo-xmin.git themes/hugo-xmin
 ADD hugo.toml /hugo/hugo.toml
 ADD content /hugo/content
 ADD static /hugo/static
-CMD ["hugo", "serve", "--bind", "0.0.0.0"]
+ENV PORT=1313
+EXPOSE $PORT
+CMD hugo serve --bind 0.0.0.0 --port $PORT
 ```
 
 For now, I am just using the built-in server in `hugo`, but it should be possible to serve using `nginx`.
@@ -104,27 +106,69 @@ Then we can use this new shortcode like so:
 
 {{< centered image="/example.png" >}}
 
-Yes! Now we're cooking with gas! ... or atleast cooking with something.
+Yes! Now we're cooking with gas! ... or atleast cooking with something. Note that this image centering trick does not work in [reader mode](https://support.mozilla.org/en-US/kb/firefox-reader-view-clutter-free-web-pages).
+
+## Conclusion
+We have made a docker file for automatically downloading, generating and serving a simple `hugo` blog site.
+Personally, I would've liked the `static` and `shortcodes` directories to not exist, but blogposts need images and it needs to center them, so they are a necessary evil.
+Could we make the directory structure better and cleaner? Probably yes.
+Will I make it better for this blog in the future? Probably yes.
+Will I make another post when I do that? Probably yes!
 
 If you want to just manually build and run docker image on your website server, feel free to stop reading here.
-The next section really elevates the publishing flow to a whole another level though.
+The next section concerns about hosting, orchestrating and deploying the site automatically, but it's totally not required.
 
-# Hosting and Deployment
+# Deployment
 Being able to build and launch the docker image is nice and can suffice for smaller projects.
 Yes, this blog is a small project and the manual method should be more than enough, but I also play [factorio](https://store.steampowered.com/app/427520/Factorio/) (highly recommend it!), so I _hvae_ to automate everything that is tedious.
+I also have other projects that I host on my VPS (Virtual Private Server) such my portfolio site [gtz.dk](https://gtz.dk) and a [gitea instance](https://git.gtz.dk/) amongst other things.
 
 ## Continuous Integration
-This section 
-I am using my [personal gitea instance](git.gtz.dk/agj/blog) to host the source code for this blog - which means that I will be using the integrated CI system there, but you can use whichever CI service you'd like.
-The general concepts of the workflow should be fairly easy to translate to any kind of CI
+I am using my personal [gitea instance](https://git.gtz.dk/agj/blog) to host the source code for this blog - which means that I will be using the integrated CI system there, but you can use whichever CI service you'd like.
+The general concepts of the workflow should be fairly easy to translate to any kind of CI, but this is how my setup looks like:
 
-<!-- TODO: Implement the fucking thing -->
+```yaml
+name: Release CI action
+run-name: ${{ gitea.repository }} release
+on:
+  push:
+    branches:
+      - main
 
-This setup also gives us the possibility of performing traditional code-review before releasing by using [pull requests]().
+jobs:
+  build-and-push-container:
+    runs-on: ubuntu-latest
+    steps:
+      - name: checkout
+        uses: actions/checkout@v4
+      - name: build container
+        run: docker build -t git.gtz.dk/${{ gitea.repository }}:latest .
+      - name: login
+        uses: docker/login-action@v3
+        with:
+          # NOTE: See https://gitea.com/gitea/docs/pulls/77/files
+          registry: git.gtz.dk
+          username: ${{ gitea.actor }}
+          password: ${{ secrets.PACKAGE_TOKEN }}
+      - name: push container
+        run: docker push git.gtz.dk/${{ gitea.repository }}:latest
+```
+
+This may look a bit overwhelming if you don't know [Github Actions](https://docs.github.com/en/actions), but it is really quite straight forward.
+Every time we push a commit to the `main` branch, we run the job named `build-and-push-container`.
+In the job, we first download our repository with the `actions/checkout@v4` action, then we build the container using `docker build` (we make sure to accurately tag the image), then we log in to the container registry that we want to host the container at using the `docker/login-action@v3` action, and the we simply `docker push` the container image.
+
+Make sure to replace the `git.gtz.dk` website mentions with your own github hosting service (whether self-hosted, or `github.com`) and replace the `gitea/GITEA` mentions with `github/GITHUB` instead.
+Note that the syntax is extemely similar to GitHub Actions - in fact Gitea Actions are trying to be 1 to 1 compatible with GitHub Actions, so it should be relatively straight forward.
+
+This setup also gives us the possibility of performing traditional code-review before releasing by using [pull requests](https://docs.gitea.com/next/usage/pull-request?_highlight).
 This should empower us to identify and correct issues (e.g. spelling mistakes or whatever) before they are pushed to the official website.
 
-## Continuous Delivery
-With a docker image readily available 
+I will probably make a post about how to host a private gitea instance with an actions runner and all that jazz. For now, I will consider that particular rabbit hole out-of-scope.
 
-### Orchestration
-I personally am a big fan of the simplicity of [portainer](), as it scales really well when doing perosnal server stuff
+This was the most difficult thing to do. We are _almost_ there.
+
+## Continuous Delivery
+With a docker image readily available, we can automatically deploy the blog when we push it!
+
+I personally am a big fan of the simplicity of [portainer](https://www.portainer.io/), as it scales really well when doing perosnal server stuff.