Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -48,3 +48,8 @@ build-iPhoneSimulator/

# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
.rvmrc
/.idea/.gitignore
/.idea/bambrew.iml
/.idea/misc.xml
/.idea/modules.xml
/.idea/vcs.xml
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,16 @@ Bambrew - Bamboo Engineering's development environment setup tooling

# First time setup

1. Copy on your personl SSH keys to ~/.ssh (including the one you use to access GitHub).
1. On another machine (maybe) set up a GitHub [personal access token][1].
1. Create a file in the following format and copy it to `~/.config/hub`:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is hub still the recommended tool? I'm using gh which has a hub auth command to help set it up (rather than manually creating its config file)

```yaml
github.com:
- user: <username>
oauth_token: <token>
protocol: https
```
1. Ask an existing `bambooengineering/umbrella` administrator to grant you repo access
1. Setup a GitHub [personal access token][1]
1. Run the following at a command prompt:

```
Expand Down
53 changes: 39 additions & 14 deletions run_bamstrap
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#!/bin/bash

set -e
#!/usr/bin/env bash
set -eu

if [ -z "$USER" ]; then
echo "Aborting! No USER environment variable set"
Expand All @@ -12,22 +11,48 @@ if [ "$(id -u)" = 0 ]; then
exit 4
fi

if ! command -v curl >/dev/null 2>&1; then
echo "Aborting! No curl found (install and retry)"
exit 5
echo "Requesting sudo access to install packages if needed"
sudo date
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think sudo -v (validate) will prompt (if necessary) for the user's password and otherwise not output anything - could be good to avoid the "unnecessary" date output


if ! [ -x "$(command -v curl)" ]; then
echo "Installing curl..."
sudo apt-get install -y curl
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is non-portable - does a base X Linux distribution not include curl?

fi

if ! command -v ruby >/dev/null || \
(command -v ruby >/dev/null && ruby -e 'exit RUBY_VERSION.split(".").first(2).join(".").to_f < 2.3'); then
echo "No suitable Ruby found (installing vendor Ruby)"
eval "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install-ruby)"
if [ ! -f "$HOME/.ssh/id_rsa.pub" ]; then
echo "Ensure you have your GitHub SSH key at ~/.ssh/id_rsa.pub"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like (at least) GitHub recommend a ed25519 key, which doesn't use the same naming convention:
https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent#generating-a-new-ssh-key

If you are using a legacy system that doesn't support the Ed25519 algorithm, use: [an rsa key]

exit 1
fi

if [ -z "$GITHUB_TOKEN" ]; then
echo "Please provide your Github Token (you can generate one at https://github.com/settings/tokens):"
read -s GITHUB_TOKEN
echo "Checking for brew installation"
if ! [ -x "$(command -v brew)" ]; then
# https://docs.brew.sh/Homebrew-on-Linux
echo "Installing brew..."
sudo apt-get install -y build-essential procps file git
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Allow brew to be used in this script
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
fi

echo "Checking for rbenv installation"
if ! [ -x "$(command -v rbenv)" ]; then
echo "Installing rbenv"
brew install rbenv
fi

if [ ! -f "$HOME/.rbenv/shims/ruby" ]; then
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Presumably we can ask rbenv if it's got an installed ruby - perhaps with rbenv version? I don't think we should hard-code this file path

echo "No suitable Ruby found. Installing ruby via rbenv..."
sudo apt-get install -y libz-dev libssl-dev libreadline-dev libyaml-dev libxml2-dev libxslt-dev
rbenv install 3.1.3
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3.1.4 is now the latest 3.1.X

fi

if [ ! -f "$HOME/.config/hub" ]; then
echo "Ensure you have set up your GitHub access token in ~/.config/hub"
exit 1
fi

GITHUB_TOKEN=$(ruby -e "require 'yaml'; puts YAML.load_file(Dir.home + '/.config/hub')['github.com'][0]['oauth_token']")
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another reason to use gh - here, this can be GITHUB_TOKEN=$(gh auth token)


run_curl() {
ORGANISATION="bambooengineering"
REPO="umbrella"
Expand All @@ -47,4 +72,4 @@ if [ "$code" != "200" ]; then
exit 7
fi
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This run_curl command seems to be used twice but if we download the file and check the status in one we can avoid it I think? Also run_curl isn't a very good name (since we're modifying this file) - how about download_bamstrap_script

Something like: code=$(run_curl -o bamstrap.rb -w "%{http_code}") and then later ruby bamstrap.rb


ruby -e "$(run_curl)"
$HOME/.rbenv/shims/ruby -e "$(run_curl)"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you could say $(rbenv which ruby) -e "$(rub_curl)" to get/use the bin path of the relevant ruby