Skip to content

Commit

Permalink
Setting this repository up for SRE RE Laptop setup
Browse files Browse the repository at this point in the history
* Combining all the onboarding tickets into Ansible
  • Loading branch information
komailo committed Jul 12, 2024
1 parent c5c92c1 commit dcd53b9
Show file tree
Hide file tree
Showing 35 changed files with 494 additions and 1,807 deletions.
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @scoremedia/release-engineering
4 changes: 0 additions & 4 deletions .github/FUNDING.yml

This file was deleted.

81 changes: 0 additions & 81 deletions .github/workflows/ci.yml

This file was deleted.

34 changes: 0 additions & 34 deletions .github/workflows/stale.yml

This file was deleted.

7 changes: 7 additions & 0 deletions .vscode/extensions.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"recommendations": [
"redhat.ansible",
"esbenp.prettier-vscode",
"tyriar.sort-lines"
]
}
17 changes: 17 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"[markdown]": {
"editor.rulers": [400],
"editor.wordWrap": "off"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"isort.args": ["--profile", "black"],
"editor.formatOnSave": true,
"files.insertFinalNewline": true,
"ansible.python.interpreterPath": "/usr/bin/python3"
}
4 changes: 3 additions & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
After [c99ff5](https://github.com/scoremedia/dev-laptop-setup/commit/c99ff5da76d7a077494ecb86a58bd5db44df6e70) the repository was forked and all development work done after is subject to theScore's licensing terms. All rights reserved.

Copyright (c) 2013 Michael Griffin
http://mwgriffin.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 all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
171 changes: 33 additions & 138 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,168 +1,63 @@
<img src="https://raw.githubusercontent.com/geerlingguy/mac-dev-playbook/master/files/Mac-Dev-Playbook-Logo.png" width="250" height="156" alt="Mac Dev Playbook Logo" />
<img src="https://raw.githubusercontent.com/scoremedia/dev-laptop-setup/main/files/Mac-Dev-Playbook-Logo.png" width="250" height="156" alt="Mac Dev Playbook Logo" />

# Mac Development Ansible Playbook

[![CI][badge-gh-actions]][link-gh-actions]
This playbook installs and configures laptop for development work in SRE Release Engineering.

This playbook installs and configures most of the software I use on my Mac for web and software development. Some things in macOS are slightly difficult to automate, so I still have a few manual installation steps, but at least it's all documented here.
## First Time Steps

## Installation
These steps should only be executed once as subsequently you will have Ansible installed via homebrew.

1. Ensure Apple's command line tools are installed (`xcode-select --install` to launch the installer).
2. [Install Ansible](https://docs.ansible.com/ansible/latest/installation_guide/index.html):
1. Ensure Apple's command line tools are installed (`xcode-select --install` to launch the installer).
2. [Install Ansible](https://docs.ansible.com/ansible/latest/installation_guide/index.html):

1. Run the following command to add Python 3 to your $PATH: `export PATH="$HOME/Library/Python/3.9/bin:/opt/homebrew/bin:$PATH"`
2. Upgrade Pip: `sudo pip3 install --upgrade pip`
3. Install Ansible: `pip3 install ansible`
1. Run the following command to add Python 3 to your $PATH temporarily: `export PATH="$HOME/Library/Python/3.9/bin:$PATH"`
2. Upgrade Pip: `sudo pip3 install --upgrade pip`
3. Install Ansible: `pip3 install ansible`

3. Clone or download this repository to your local drive.
4. Run `ansible-galaxy install -r requirements.yml` inside this directory to install required Ansible roles.
5. Run `ansible-playbook main.yml --ask-become-pass` inside this directory. Enter your macOS account password when prompted for the 'BECOME' password.
### Running the Playbooks

> Note: If some Homebrew commands fail, you might need to agree to Xcode's license or fix some other Brew issue. Run `brew doctor` to see if this is the case.
#### Setup

1. Clone or download this repository to your local drive.
1. Run `ansible-galaxy install -r requirements.yml` inside this directory to install required Ansible roles.

### Use with a remote Mac
#### SRE Release Engineering

You can use this playbook to manage other Macs as well; the playbook doesn't even need to be run from a Mac at all! If you want to manage a remote Mac, either another Mac on your network, or a hosted Mac like the ones from [MacStadium](https://www.macstadium.com), you just need to make sure you can connect to it with SSH:
This playbook will setup the laptop for SRE Release Engineering.

1. (On the Mac you want to connect to:) Go to System Preferences > Sharing.
2. Enable 'Remote Login'.
To run this: `ansible-playbook playbooks/srere-laptop-setup.yml --ask-become-pass`

> You can also enable remote login on the command line:
>
> sudo systemsetup -setremotelogin on
It performs the following tasks:

Then edit the `inventory` file in this repository and change the line that starts with `127.0.0.1` to:
- Installs homebrew and sets up the Jfrog repository
- Install homebrew packages, apps and taps as defined in `homebrew_installed_packages`, `homebrew_cask_apps`, `homebrew_taps` in [default.srere-laptop-setup.yml](vars_files/default.srere-laptop-setup.yml)
- Sets up the zsh shell by setting up common functions, paths variable and other environment variables.
- Sets up Git with some configurations like:
- GPG Signing
- Proper username and email (derived from your Mac username)
- Default init branch set to main
- `push.autoSetupRemote` set so you don't have to do `git push --set-upstream` when pushing a new branch
- Helm repository setup to point to the internal Helm Chart repository.

```
[ip address or hostname of mac] ansible_user=[mac ssh username]
```
For a more accurate description please see [playbooks/srere-laptop-setup.yml](playbooks/srere-laptop-setup.yml) and the roles and tasks in it.

If you need to supply an SSH password (if you don't use SSH keys), make sure to pass the `--ask-pass` parameter to the `ansible-playbook` command.
> Note: If some Homebrew commands fail, you might need to agree to Xcode's license or fix some other Brew issue. Run `brew doctor` to see if this is the case.
### Running a specific set of tagged tasks

You can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook`'s `--tags` flag. The tags available are `dotfiles`, `homebrew`, `mas`, `extra-packages` and `osx`.
You can filter which part of the provisioning process to run by specifying a set of tags using `ansible-playbook`'s `--tags` flag. The tags that are available can be listed by running `ansible-playbook playbooks/srere-laptop-setup.yml --list-tags`.

ansible-playbook main.yml -K --tags "dotfiles,homebrew"
ansible-playbook playbooks/srere-laptop-setup.yml --ask-become-pass --tags git-config,helm-repo-setup

## Overriding Defaults

Not everyone's development environment and preferred software configuration is the same.

You can override any of the defaults configured in `default.config.yml` by creating a `config.yml` file and setting the overrides in that file. For example, you can customize the installed packages and apps with something like:

```yaml
homebrew_installed_packages:
- cowsay
- git
- go

mas_installed_apps:
- { id: 443987910, name: "1Password" }
- { id: 498486288, name: "Quick Resizer" }
- { id: 557168941, name: "Tweetbot" }
- { id: 497799835, name: "Xcode" }

composer_packages:
- name: hirak/prestissimo
- name: drush/drush
version: '^8.1'

gem_packages:
- name: bundler
state: latest

npm_packages:
- name: webpack

pip_packages:
- name: mkdocs

configure_dock: true
dockitems_remove:
- Launchpad
- TV
dockitems_persist:
- name: "Sublime Text"
path: "/Applications/Sublime Text.app/"
pos: 5
```
Any variable can be overridden in `config.yml`; see the supporting roles' documentation for a complete list of available variables.

## Included Applications / Configuration (Default)

Applications (installed with Homebrew Cask):

- [ChromeDriver](https://sites.google.com/chromium.org/driver/)
- [Docker](https://www.docker.com/)
- [Dropbox](https://www.dropbox.com/)
- [Firefox](https://www.mozilla.org/en-US/firefox/new/)
- [Google Chrome](https://www.google.com/chrome/)
- [Handbrake](https://handbrake.fr/)
- [Homebrew](http://brew.sh/)
- [LICEcap](http://www.cockos.com/licecap/)
- [nvALT](http://brettterpstra.com/projects/nvalt/)
- [Sequel Ace](https://sequel-ace.com) (MySQL client)
- [Slack](https://slack.com/)
- [Sublime Text](https://www.sublimetext.com/)
- [Transmit](https://panic.com/transmit/) (S/FTP client)

Packages (installed with Homebrew):

- autoconf
- bash-completion
- doxygen
- gettext
- gifsicle
- git
- gh
- go
- gpg
- httpie
- iperf
- libevent
- sqlite
- nmap
- node
- nvm
- php
- ssh-copy-id
- cowsay
- readline
- openssl
- pv
- wget
- wrk
- zsh-history-substring-search

My [dotfiles](https://github.com/geerlingguy/dotfiles) are also installed into the current user's home directory, including the `.osx` dotfile for configuring many aspects of macOS for better performance and ease of use. You can disable dotfiles management by setting `configure_dotfiles: no` in your configuration.

Finally, there are a few other preferences and settings added on for various apps and services.

## Full / From-scratch setup guide

Since I've used this playbook to set up something like 20 different Macs, I decided to write up a full 100% from-scratch install for my own reference (everyone's particular install will be slightly different).

You can see my full from-scratch setup document here: [full-mac-setup.md](full-mac-setup.md).

## Testing the Playbook

Many people have asked me if I often wipe my entire workstation and start from scratch just to test changes to the playbook. Nope! This project is [continuously tested on GitHub Actions' macOS infrastructure](https://github.com/geerlingguy/mac-dev-playbook/actions?query=workflow%3ACI).

You can also run macOS itself inside a VM, for at least some of the required testing (App Store apps and some proprietary software might not install properly). I currently recommend:

- [UTM](https://mac.getutm.app)
- [Tart](https://github.com/cirruslabs/tart)
At this time this is not possible. The configuration is somewhat neccesary to do development work. When preferential configuration is added, overriding those options will be provided.

## Ansible for DevOps

Check out [Ansible for DevOps](https://www.ansiblefordevops.com/), which teaches you how to automate almost anything with Ansible.

## Author

This project was created by [Jeff Geerling](https://www.jeffgeerling.com/) (originally inspired by [MWGriffin/ansible-playbooks](https://github.com/MWGriffin/ansible-playbooks)).

[badge-gh-actions]: https://github.com/geerlingguy/mac-dev-playbook/workflows/CI/badge.svg?event=push
[link-gh-actions]: https://github.com/geerlingguy/mac-dev-playbook/actions?query=workflow%3ACI
This project was created by [Komail Kanjee](https://github.com/komailo) and was forked off [mac-dev-playbook](https://github.com/geerlingguy/mac-dev-playbook) by [Jeff Geerling](https://www.jeffgeerling.com/) which was originally inspired by [MWGriffin/ansible-playbooks](https://github.com/MWGriffin/ansible-playbooks).
Loading

0 comments on commit dcd53b9

Please # to comment.