kind: pipeline name: hello-world type: docker platform: os: linux arch: arm64 steps: - name: block-posts-containing-tk image: busybox commands: # # This is necessary because, if `grep ...` doesn't find anything, it will _return_ (not print) a value of 1 # # (non-zero return codes indicating errors in Unix - since there are many more ways for something to go wrong # # than there are for it to go right!), and so the `files=` assignment will also return 1, and the whole operation # # will be considered a failure. # # # # Since a non-zero value is truthy in Linux, we can use the OR operator (`||`) to only execute the second command # # if the first one errors out. So, this line can be translated to English as: # # "Set the variable `files` to a list of all the files that contain `TK` - unless there aren't any, in which case # # set it to `FILES NOT FOUND" - files=$(grep -rl 'TK' blog/content/posts || echo "FILES NOT FOUND") # # We have to filter out (`grep -v`) the "marker" value of `FILES NOT FOUND`, otherwise the no-matches case would # # be recorded as having 1 matching file, leading to an error-out below. # # (I guess _technically_ there's an edge case in that, if I ever make a blog post titled "FILES NOT FOUND" _which also_ # # contains the string `TK`, it would slip through this check. But that feels pretty unlikely - not least because spaces # # are very rare in my filesystem names - so I'm ok taking that risk) - count=$(wc -l <(echo "$files" | grep -v "FILES NOT FOUND") | awk '{print $1}') - if [[ "$count" -gt "0" ]]; then - echo "Found TK in $count files:" - echo $files - exit 1 # TODO - and alerting via Matrix! - fi - name: build-blog image: alpine # Very unlikely to need updates, and pulling images seems slow on this setup - # can manually reset this if necessary pull: if-not-exists commands: # I considered caching this install in a pre-built image in registry, # but the install seems pretty quick! - apk add hugo git - git submodule init - git submodule update --recursive - hugo --source blog - name: docker-build-and-push image: thegeeklab/drone-docker-buildx # Absurd that this isn't offered as first-party! privileged: true settings: registry: gitea.scubbo.org username: scubbo password: from_secret: gitea_password repo: gitea.scubbo.org/scubbo/blog_helm tags: - ${DRONE_COMMIT_SHA:0:10} platforms: - linux/arm64 - linux/amd64 - name: auto-update-infra-repo image: gitea.scubbo.org/scubbo/auto-repo-update-drone-plugin:latest settings: branch: main git_repo: https://gitea.scubbo.org/scubbo/blog-infrastructure image_tag: ${DRONE_COMMIT_SHA:0:10} destination_file: helm/deployed-images/prod author_email: scubbojj@gmail.com author_name: Jack Jackson commit_message: "[Auto] Update Prod to ${DRONE_COMMIT_SHA:0:10}" access_token: from_secret: gitea_pat - name: update-argo image: curlimages/curl environment: ARGO_TOKEN: from_secret: argo_token commands: - "curl -sS -X POST \"argo-cd-argocd-server.argo.svc.cluster.local/api/v1/applications/blog-infrastructure/sync\" -H \"Authorization: Bearer ${ARGO_TOKEN}\" -H \"Content-Type: application/json\"" - name: purge-cache image: curlimages/curl environment: CLOUDFLARE_TOKEN: from_secret: cloudflare_token commands: - "curl -sS -X POST \"https://api.cloudflare.com/client/v4/zones/c86d55d225ed973d5da45239beac2f99/purge_cache\" -H \"Authorization: Bearer ${CLOUDFLARE_TOKEN}\" -H \"Content-Type:application/json\" -d '{\"files\":[\"https://blog.scubbo.com\"]}'" - name: telegram_notification image: appleboy/drone-telegram when: status: - failure - success settings: token: from_secret: telegram_token to: from_secret: telegram_convo_id