Skip to content

Instantly share code, notes, and snippets.

View suhlig's full-sized avatar
😻
Happy

Steffen Uhlig suhlig

😻
Happy
View GitHub Profile
@suhlig
suhlig / concourse-ideas.md
Last active July 31, 2026 10:54
Ideas about Concourse

Concourse Ideas

Pipelines

  • Order the document: groups, then jobs, then resources, then resource types
  • Manage the image a task is using by getting it before each use
  • Every step needs timeouts and retries
  • Always declare inputs and outputs in the pipeline, even if their names match other pipeline resources
  • Declare those parameters (environment variables) in the pipeline that need to be set to secrets
  • Add a self-update job (remember to pause it when flying a one-off change)
@suhlig
suhlig / README.md
Last active August 30, 2026 09:19
My Coding Conventions

Agent Instructions

Add them to a project by instructing the agent:

Retrieve and apply my ground rules as found at https://gist.githubusercontent.com/suhlig/a96c5bfb22170c5b1a27a724e9621e02/raw/ground-rules.md
Retrieve and apply my Go coding conventions as found at https://gist.githubusercontent.com/suhlig/a96c5bfb22170c5b1a27a724e9621e02/raw/go-coding-conventions.md
@suhlig
suhlig / delve.sh
Created July 15, 2025 13:52
Running delve for cli and ginkgo tests
# if there is a main.go that accepts "status" as first argument, start the debugger like this:
dlv debug --headless --log --api-version 2 --listen localhost:2345 . -- status
# if there is a Ginkgo test in the foo directory (package example.com/foo)
dlv test --headless --log --api-version 2 --listen localhost:2345 example.com/foo
@suhlig
suhlig / show-systems-json-messages.markdown
Created July 27, 2024 17:30
Systemd can print logs as JSON, making custom log formats simple. In addition, if the messages themselves are JSON, jq can unescape them.
$ journalctl -u concourse-web -f -o json | jq '.MESSAGE | fromjson'
{
  "timestamp": "2024-07-27T17:29:50.525878425Z",
  "level": "info",
  "source": "atc",
  "message": "atc.scanner.tick.start",
 "data": {
@suhlig
suhlig / fetch_file_content_at.go
Created July 24, 2024 21:35
Fetch content of a file from GitHub at a given committish
package main
import (
"context"
"encoding/base64"
"fmt"
"log"
"os"
"github.com/google/go-github/v63/github"
curl -L $(curl -L https://api.github.com/repos/derailed/k9s/releases/latest | jq --raw-output '.assets[] | select(.name == "k9s_Linux_amd64.tar.gz") | .browser_download_url') | tar xz k9s
@suhlig
suhlig / b2-buckets-by-size.sh
Last active May 5, 2024 11:07
Table of b2 buckets sorted by total size
b2 list-buckets --json \
| jq '.[].bucketName' \
| xargs -n 1 b2 get-bucket --showSize \
| jq -r --slurp '["name","size"], (.[] | [.bucketName, .totalSize]) | @csv' \
| qsv sort --numeric --reverse --select size \
| qsv table

Example for a Concourse pipeline triggered my a webhook

Assmuming this pipeline was set as

$ fly --target example set-pipeline --pipeline manual-trigger --config manual-trigger.yml

then you can trigger a new build with

@suhlig
suhlig / go-work-update-all.sh
Last active November 14, 2023 15:00
Update dependencies of all modules in a go workspace
go work edit -json \
| jq --raw-output '.Use.[].DiskPath' \
| xargs -I MODULE zsh -o errexit -c "
cd MODULE
pwd
go get -d -u -t ./...
go mod tidy
[ -d vendor ] && go mod vendor
"
@suhlig
suhlig / tasmota-discover.sh
Created June 9, 2023 10:18
Discover Tasmota devices using MQTT
timeout 2 \
mosquitto_sub \
--url 'mqtts://user:password@mqtt.example.com/tasmota/discovery/+/config' \
-F %J \
| jq -r '[ .payload.dn, .payload.ip ] | join(" => ")'