Need the up-to-date version so that exiting the console doesn't totally mess up the hosting shell (Bash). Should not depend on this package longterm, as it's platform-specific. Tracking in https://github.com/dotnet/cli/issues/405 |
||
---|---|---|
docs | ||
ext-src | ||
src | ||
.gitignore | ||
.gitmodules | ||
debug.sh | ||
global.json | ||
Makefile | ||
monad-docker.sh | ||
nuget.config | ||
powershell | ||
psrp.sh | ||
publish.sh | ||
README.md | ||
run.sh | ||
test.sh |
PowerShell for Linux
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
. Please commit early and often.
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.
Auto-corrects your command when it's sure (
stats
tostatus
)
git config --global help.autoCorrect -1
Refuses to merge when pulling, and only pushes to branch with same name.
git config --global pull.ff only
git config --global push.default current
Shows shorter commit hashes and always shows reference names in the log.
git config --global log.abbrevCommit true
git config --global log.decorate short
Ignores whitespace changes and uses more information when merging.
git config --global apply.ignoreWhitespace change
git config --global rerere.enabled true
git config --global rerere.autoUpdate true
git config --global am.threeWay 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 (and your username for the username)
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. Note that because VSO's "Complete Pull Request" button merges with --no-ff
, an extra merge commit will always be created. This can be annoying when trying to commit updates to submodules. When a submodule PR is approved, you can "complete" it without a merge commit by merging it to develop manually and pushing the updated head.
Our convention is to create feature branches dev/feature
off our integration branch develop
. We then merge develop
to master
every few weeks when it is stable.
Setup build environment
We use the .NET Command Line Interface (dotnet-cli
) to build the managed components, and CMake to build the native components. Install dotnet-cli
by following their documentation. Then install the following dependencies (assuming Ubuntu 14.04):
sudo apt-get install g++ cmake make libicu-dev libboost-filesystem-dev lldb-3.6 strace
OMI
To develop on the PowerShell Remoting Protocol (PSRP), you'll need to be able to compile OMI, which additionally requires:
sudo apt-get install libpam0g-dev libssl-dev libcurl4-openssl-dev
Building
Native
cd src/monad-native
cmake -DCMAKE_BUILD_TYPE=Debug .
VERBOSE=1 make -j
ctest -V
Managed
dotnet restore
cd src/Microsoft.PowerShell.Linux.Host
dotnet publish --framework dnxcore50 --runtime ubuntu.14.04-x64 --output ../../bin
Now run with ./powershell
.
Adding Pester tests
Pester tests are located in the src/pester-tests
folder. The makefile targets test
and pester-tests
will run all Pester tests.
The steps to add your pester tests are:
- add
*.Tests.ps1
files tosrc/pester-tests
- run
make test
to run all the tests