Skip to content

Instantly share code, notes, and snippets.

View lox's full-sized avatar

Lachlan Donald lox

View GitHub Profile
@lox
lox / docker-compose.yml
Created December 21, 2022 05:40
Donald Family Minecraft
version: "3.5"
services:
minecraft:
image: 05jchambers/legendary-minecraft-geyser-floodgate:latest
restart: "unless-stopped"
stdin_open: true
tty: true
volumes:
- ./minecraft:/minecraft
environment:
@lox
lox / test_mysql_docker.sh
Created June 9, 2022 06:33
MySQL in Docker seems slow to start 🤔
#!/bin/bash
set -euo pipefail
wait_for_container() {
echo -n "Waiting for $1"
for _ in $(seq 1 120); do
test "$(docker inspect --format "{{.State.Health.Status}}" "$1")" == "healthy" && break
sleep 1
echo -n .
done
@lox
lox / indicate.go
Created January 2, 2022 02:18
Thinking on an API for spinner/progress bar library
// Spinners and Progress bars are the same thing.
// They are assembled with a go template with some built in functions or templated strings
// for things like messages before and after.
// Render a spinner that looks like:
// ⡀ Loading blah... [3s]
spinner := indicate.New(context.Background(),
`{{ spinner "⠁⠂⠄⡀⢀⠠⠐⠈ " }} {{ template "message" }} [{{ elapsed }}]`).
WithDefaults(indicate.SpinnerDefaults).
@lox
lox / main.go
Created July 14, 2021 02:36
A utility for generating GitHub Access Tokens from a GitHub App
package main
import (
"bytes"
"crypto/rsa"
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
@lox
lox / test.sh
Created July 30, 2020 10:41
Testing interpolation
echo "test"
@lox
lox / child.sh
Last active November 4, 2019 01:49
#!/bin/bash
set -euo pipefail
terminate(){
printf "Terminating child process $$ after signal."
exit 1
}
printf "Running $0, pid is %d, pgid is %d\n" "$$" "$(ps -o pgid= $$)"
@lox
lox / buildkite.yml
Created February 4, 2019 07:52
A pipeline with no checkout
steps:
- command: echo hello world!
#!/bin/bash
set -euo pipefail
measure() {
f=$1
n=$2
shift 2
echo wall,user,sys,rss > "$f"
for i in $(seq $n); do
[[ -d $i ]] && rm -rf $i
@lox
lox / README.md
Last active November 13, 2019 04:17
How Buildkite Environment is Created

I've done a bit of a deep dive into how we produce our env. The flow is slightly complicated as some environment comes from the shell that the agent runs in and some comes from buildkite.com and then some is generated each job.

For context, the code that generates the job environment is here: https://github.com/buildkite/agent/blob/2f3d6935996d45877071c01f7b19ae07db302d69/agent/job_runner.go#L307-L426

Paraphrased, the process is:

  • A build is triggered on buildkite.com, with user-provided environment (step or pipeline level) and bk specific env
  • Write out base job environment to an env file for future reference and set BUILDKITE_ENV_FILE
  • The agent job runner merges in it's env (overwriting anything set above, creating "protected" env)
@lox
lox / .buildkite.yml
Last active November 23, 2018 02:25
Test windows steps
steps:
- label: windows-steps
command: "echo hello"
plugins:
- docker#8baeb676321d59634ecaae938e83b13c17f447e0:
image: "microsoft/dotnet:latest"
agents:
queue: ${BUILDKITE_AGENT_META_DATA_QUEUE}