Hugo, Gitea, and Drone CI 2020-12-10 One of the many nice things about the tildeverse is that we have can have repos in tildegit. Another nice thing is it uses Gitea and Drone CI. Yay open source, and stuff. Bashblog might be nice if all you want to do is write and post, but it's not very nice when it comes to customization. Also I've been spoiled rotten by Gitlab/hub Pages and really wanted to set up something like that for the tildes. And so, after much putting it off and asking people for help, I finally undertook the seemingly daunting (but actually easy although a bit tedious) task of setting all of this up. I'll be the first to admit I know jack shit about Docker, (and I should probably learn how to use it at some point since I have a spare box at home that I plan to use as a personal server of sorts), so my current solution may not be the best or most elegant but for the intents and purposes of setting this up I figured it wouldn't be 100% necessary to create containers and such. And I would have never gotten this off the ground either, so there's that. After creating and testing my Hugo site locally, I pushed it all to a repo, activated it under Drone and got to work on the `.drone.yml` file. A couple searches later, I was all set up with something I pulled from the Drone docs[^1]. Easy peasy... Or so I thought. I went with a combination of the Hugo plugin[^2] and the rsync plugin[^3], which didn't work at all. PEBCAK? I'm not so sure. For some reason, rsync wouldn't pick up on the secrets I set up on the repo config. Oh well... I fell back to the solution the documentation proposes and used the scp plugin[^4], which does work. Or would have worked if there was something for it to copy... This is how I discovered the Hugo plugin didn't work. Or didn't work for me? I found a number of posts of people using it successfully. Mind you, these are all a couple of years old now. At this point I scrapped all the remote stuff, went back to the docs[^5] for a fresh start, and decided to try a manual approach without using containers. First, I recreated the repo setup in Drone and added the connection details as secrets. Second, I logged into my ~club account and cloned the repo. Then I recreated `.drone.yml` as follows: ```yaml --- kind: pipeline type: ssh name: deploy server: host: from_secret: host user: from_secret: username ssh_key: from_secret: ssh_key trigger: branch: - blog steps: - name: deploy commands: - cd /home/me/myBlog - git pull origin blog - hugo --cacheDir ~/temp/ - rm -r resources - cp -ruf public/* /home/me/public_html - rm -r public ``` This establishes an ssh connection, pulls the git repo, generates the static pages using hugo, and moves them to their designated location. The `trigger` option makes sure the pipeline only works on the specified branch, this makes working on themes or whatever on a different branch easier, and it won't eat up CI time. Hugo's default `cacheDir` is `/tmp`, which can't be accessed by non admin users on tilde, so I set it to a directory I created. Last but not least, I created a `.gitignore` with the following lines in it: ``` public/ resources/ ``` `public` contains the generated blog and `resources` houses files used in the generation, they're not needed in the repo. [^1]: https://readme.drone.io/ [^2]: http://plugins.drone.io/cbrgm/drone-hugo/ [^3]: http://plugins.drone.io/drillster/drone-rsync/ [^4]: http://plugins.drone.io/appleboy/drone-scp/ [^5]: https://readme.drone.io/pipeline/ssh/overview/