docs | ||
ext-src | ||
scripts | ||
src | ||
.gitignore | ||
.gitmodules | ||
README.md |
PowerShell for Linux
Getting started
Obtain the source code
Setup Git
Install Git, the version control system. If you're new to Git, peruse the documentation and go through some tutorials; I recommend familiarizing yourself with checkout
, branch
, pull
, push
, merge
, and after a while, rebase
and cherry-pick
.
The user name and email must be set to do just about anything with Git.
git config --global user.name "First Last"
git config --global user.email "alias@microsoft.com"
I highly recommend these configurations to help deal with whitespace, rebasing, and general use of Git.
git config --global am.threeWay true
git config --global apply.ignoreWhitespace change
git config --global help.autoCorrect -1
git config --global log.abbrevCommit true
git config --global log.decorate short
git config --global pull.ff only
git config --global push.default current
git config --global rerere.enabled true
git config --global rerere.autoUpdate true
Setup Visual Studio Online authentication
To use Git's https
protocol with VSO, you'll want to setup tokens, and have Git remember them.
git config --global credential.helper store
- Login to https://msostc.visualstudio.com
- Click your name in the upper left corner and click 'My profile'
- Click the "Security" tab in the left pane (under "Details")
- Click "Add"
- Enter "msostc" for "Description"
- Set "Expires In" to "1 year"
- Choose " msostc" for "Accounts"
- Choose "All scopes"
- Click "Create Token" (you may want to copy this token somewhere safe, as VSO will not show it again!)
- Use this token as the password when cloning
- Make a token for https://microsoft.visualstudio.com and use it when the
monad
submodule is cloned
Download source code
Clone our monad-linux source from Visual Studio Online, it's the superproject with a number of submodules.
git clone --recursive https://msostc.visualstudio.com/DefaultCollection/PS/_git/monad-linux
Please read the documentation on submodules if you're not familiar with them.
Setup build environment
Docker
See the official installation documentation on how to install Docker, and don't forget to setup a Docker group.
The Docker container can be updated with docker pull andschwa/magrathea
, which downloads it from the automated build repository.
This container isolates all our build dependencies, including Ubuntu 14.04 and Mono. See the Dockerfile to look under the hood.
The build.sh
script is a wrapper that starts a temporary container with monad-linux
mounted and runs the arguments given to the script as your current user, but inside the container. The build artifacts will exist in your local folder and be owned by your user, essentially making the use of the container invisible. The build-tty.sh
allocates a shell for the container, and so allows you to launch Bash or an interactive PowerShell session.
Building
cd scripts
since it contains theMakefile
andbuild.sh
./build.sh make all
will build PowerShell for Linux./build.sh make run
will build and execute a demo,"a","b","c","a","a" | Select-Object -Unique
./build-tty.sh make run-interactive
will open an interactive PowerShell console./build.tty make test
will execute the unit testsmake clean
will remove the built objectsmake clean-native
will removelibps
make cleanall
will also remove the Nuget packages
Adding Pester tests
Pester tests are located in the src/pester-tests folder. The makefile targets "test" and "pester-tests" will run all Pester-based tests.
The steps to add your pester tests are:
- add *.Tests.ps1 files to src/pester-tests
- run "make pester-tests" to run the tests