Skip to content

Instantly share code, notes, and snippets.

@elasticdog
elasticdog / signing-releases.md
Created June 30, 2022 14:01
Tagging and Signing Releases in Git

Tagging and Signing Releases in Git

Fish:

$ set -x GPG_TTY (tty)

Bash:

@elasticdog
elasticdog / ephemeral-port
Created April 4, 2019 15:11
A pure Bash script to return a random *unused* ephemeral TCP port
#!/usr/bin/env bash
#
# ephemeral-port
#
# A script that returns a random *unused* TCP port within the IANA-suggested
# ephemeral port range of 49152 to 65535. Defaults to checking the localhost,
# but takes an optional hostname as an argument.
#
# See:
@elasticdog
elasticdog / pre-commit
Created September 20, 2018 20:35
Git pre-commit hook for linting YAML files
#!/usr/bin/env bash
current_branch=$(git symbolic-ref -q HEAD | sed -e 's|^refs/heads/||')
if [[ $current_branch = 'master' ]]; then
printf 'Direct commits to the master branch are not allowed.\n'
exit 1
fi
if command -v yamllint > /dev/null; then
@elasticdog
elasticdog / vault-cp
Created July 27, 2018 18:32
A script to copy Vault secrets from one path to another
#!/usr/bin/env bash
# ensure we were given two command line arguments
if [[ $# -ne 2 ]]; then
echo 'usage: vault-cp SOURCE DEST' >&2
exit 1
fi
source=$1
dest=$2
@elasticdog
elasticdog / LICENSE
Last active October 17, 2022 14:00
Git Triangular Workflow
Copyright (c) 2018, Aaron Bull Schaefer <aaron@elasticdog.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
@elasticdog
elasticdog / config.nix
Last active December 3, 2020 15:51
~/.nixpkgs/config.nix package override for Ansible v2.1.4.0
{
packageOverrides = pkgs: rec {
ansible2 = pkgs.stdenv.lib.overrideDerivation pkgs.ansible2 (oldAttrs: rec {
variable = "2.1.4.0";
name = "ansible-${variable}";
src = pkgs.fetchurl {
url = "http://releases.ansible.com/ansible/${name}.tar.gz";
sha256 = "05nc68900qrzqp88970j2lmyvclgrjki66xavcpzyzamaqrh7wg9";
};
@elasticdog
elasticdog / git-dmz-flow.md
Created October 4, 2016 18:29 — forked from djspiewak/git-dmz-flow.md
Git DMZ Flow

Git DMZ Flow

I've been asked a few times over the last few months to put together a full write-up of the Git workflow we use at RichRelevance (and at Precog before), since I have referenced it in passing quite a few times in tweets and in person. The workflow is appreciably different from GitFlow and its derivatives, and thus it brings with it a different set of tradeoffs and optimizations. To that end, it would probably be helpful to go over exactly what workflow benefits I find to be beneficial or even necessary.

  • Two developers working on independent features must never be blocked by each other
    • No code freeze! Ever! For any reason!
  • A developer must be able to base derivative work on another developer's work, without waiting for any third party
  • Two developers working on inter-dependent features (or even the same feature) must be able to do so without interference from (or interfering with) any other parties
  • Developers must be able to work on multiple features simultaneously, or at lea
@elasticdog
elasticdog / vagrant-box-clean
Last active May 25, 2018 13:44
clean up old versions of vagrant boxes
#!/usr/bin/env bash
##### Functions
# print this script's usage message to stderr
usage() {
cat <<-EOF >&2
usage: vagrant-box-clean [-p PREFIX] [-d] [-h]
EOF
}
@elasticdog
elasticdog / poolboy_demo.ex
Created October 23, 2015 14:20 — forked from henrik/poolboy_demo.ex
Example of using Poolboy in Elixir to limit concurrency (e.g. of HTTP requests).
defmodule HttpRequester do
use GenServer
def start_link(_) do
GenServer.start_link(__MODULE__, nil, [])
end
def fetch(server, url) do
# Don't use cast: http://blog.elixirsips.com/2014/07/16/errata-dont-use-cast-in-a-poolboy-transaction/
timeout_ms = 10_000
javascript:(function(){var%20ps=document.getElementsByTagName("pre");for(var%20i=0;i<ps.length;i++){ps[i].style.whiteSpace="pre-wrap";ps[i].style.width="600px";}})();