---
layout: default
navsection: userguide
navmenu: Tutorials
title: "Writing a pipeline"
...
In this tutorial, we will write the "hash" script demonstrated in the first tutorial.
*This tutorial assumes that you are "logged into an Arvados VM instance":{{site.baseurl}}/user/getting_started/ssh-access.html#login, and have a "working environment.":{{site.baseurl}}/user/getting_started/check-environment.html*
This tutorial uses *@you@* to denote your username. Replace *@you@* with your user name in all the following examples.
h2. Setting up Git
As discussed in the previous tutorial, all Crunch scripts are managed through the @git@ revision control system.
First, you should do some basic configuration for git (you only need to do this the first time):
~$ git config --global user.name "Your Name"
~$ git config --global user.email you@example.com
git@git.{{ site.arvados_api_host }}:you.git
~$ git clone git@git.{{ site.arvados_api_host }}:you.git
Cloning into 'you'...
$ man gittutorial
or "click here to search Google for git tutorials":http://google.com/#q=git+tutorial
{% include 'notebox_end' %}
h2. Creating a Crunch script
Start by entering the *@you@* directory created by @git clone@. Next create a subdirectory called @crunch_scripts@ and change to that directory:
~$ cd you
~/you$ mkdir crunch_scripts
~/you$ cd crunch_scripts
~/you/crunch_scripts$ nano hash.py
Add the following code to compute the md5 hash of each file in a collection:
~/you/crunch_scripts$ chmod +x hash.py
{% include 'notebox_begin' %}
The steps below describe how to execute the script after committing changes to git. To run a script locally for testing, please see "debugging a crunch script":{{site.baseurl}}/user/topics/tutorial-job-debug.html .
{% include 'notebox_end' %}
Next, add the file to @git@ staging. This tells @git@ that the file should be included on the next commit.
notextile. ~/you/crunch_scripts$ git add hash.py
Next, commit your changes to git. All staged changes are recorded into the local @git@ repository:
~/you/crunch_scripts$ git commit -m"my first script"
[master (root-commit) 27fd88b] my first script
1 file changed, 33 insertions(+)
create mode 100755 crunch_scripts/hash.py
~/you/crunch_scripts$ git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 682 bytes, done.
Total 4 (delta 0), reused 0 (delta 0)
To git@git.qr1hi.arvadosapi.com:you.git
* [new branch] master -> master
~/you/crunch_scripts$ cd ~
~$ cat >the_pipeline <<EOF
{
"name":"My first pipeline",
"components":{
"do_hash":{
"script":"hash.py",
"script_parameters":{
"input":{
"required": true,
"dataclass": "Collection"
}
},
"script_version":"you:master"
}
}
}
EOF
~$ arv pipeline_template create --pipeline-template "$(cat the_pipeline)"