1
0
mirror of https://github.com/ohwgiles/laminar.git synced 2025-06-13 12:54:29 +00:00

Quote bash variables

This commit is contained in:
Jakob Zahn 2024-12-18 10:43:44 +01:00
parent 3851c1d6bc
commit 5970f5e702

View File

@ -276,7 +276,7 @@ else
laminarc run example-downstream-regular laminarc run example-downstream-regular
fi fi
laminarc run example-test-$TARGET_PLATFORM laminarc run "example-test-$TARGET_PLATFORM"
``` ```
`laminarc` reads the `$JOB` and `$RUN` variables set by `laminard` and passes them as part of the queue/start/run request so the dependency chain can always be traced back. `laminarc` reads the `$JOB` and `$RUN` variables set by `laminard` and passes them as part of the queue/start/run request so the dependency chain can always be traced back.
@ -337,7 +337,7 @@ Then in `example.run`
```bash ```bash
#!/bin/bash #!/bin/bash
echo $foo # prints "bar" echo "$foo" # prints "bar"
``` ```
--- ---
@ -350,7 +350,7 @@ Laminar provides an archive directory `/var/lib/laminar/archive/$JOB/$RUN` and e
```bash ```bash
#!/bin/bash -xe #!/bin/bash -xe
cp example.out $ARCHIVE/ cp example.out "$ARCHIVE/"
``` ```
This folder structure has been chosen to make it easy for system administrators to host the archive on a separate partition or network drive. This folder structure has been chosen to make it easy for system administrators to host the archive on a separate partition or network drive.
@ -386,8 +386,8 @@ If you want to send to different addresses depending on the job, replace `engine
You could also update the `$RECIPIENTS` variable dynamically based on the build itself. For example, if your run script accepts a parameter `$rev` which is a git commit id, as part of your job's `.after` script you could do the following: You could also update the `$RECIPIENTS` variable dynamically based on the build itself. For example, if your run script accepts a parameter `$rev` which is a git commit id, as part of your job's `.after` script you could do the following:
```bash ```bash
author_email=$(git show -s --format='%ae' $rev) author_email=$(git show -s --format='%ae' "$rev")
laminarc set RECIPIENTS $author_email laminarc set RECIPIENTS "$author_email"
``` ```
See [examples/notify-email-pretty](https://github.com/ohwgiles/laminar/blob/master/examples/notify-email-pretty) and [examples/notify-email-text-log](https://github.com/ohwgiles/laminar/blob/master/examples/notify-email-text-log). See [examples/notify-email-pretty](https://github.com/ohwgiles/laminar/blob/master/examples/notify-email-pretty) and [examples/notify-email-text-log](https://github.com/ohwgiles/laminar/blob/master/examples/notify-email-text-log).
@ -426,21 +426,21 @@ For example, the following script creates a tarball containing both compiled out
git clone /path/to/sources . git clone /path/to/sources .
make make
# Use a hardlink so the arguments to tar will be relative to the CWD # Use a hardlink so the arguments to tar will be relative to the CWD
ln $WORKSPACE/StaticAsset.bin ./ ln "$WORKSPACE/StaticAsset.bin" ./
tar zc a.out StaticAsset.bin > MyProject.tar.gz tar zc a.out StaticAsset.bin > MyProject.tar.gz
# Archive the artefact (consider moving this to the .after script) # Archive the artefact (consider moving this to the .after script)
mv MyProject.tar.gz $ARCHIVE/ mv MyProject.tar.gz "$ARCHIVE/"
``` ```
For a project with a large git history, it can be more efficient to store the sources in the workspace: For a project with a large git history, it can be more efficient to store the sources in the workspace:
```bash ```bash
#!/bin/bash -ex #!/bin/bash -ex
cd $WORKSPACE/myproject cd "$WORKSPACE/myproject"
git pull git pull
cd - cd -
cmake $WORKSPACE/myproject cmake "$WORKSPACE/myproject"
make -j4 make -j4
``` ```
@ -470,16 +470,16 @@ The following example uses [flock](https://linux.die.net/man/1/flock) to efficie
# Locked subshell for modifying the workspace # Locked subshell for modifying the workspace
( (
flock 200 flock 200
cd $WORKSPACE cd "$WORKSPACE"
# Download all the latest commits # Download all the latest commits
git fetch git fetch
git checkout $rev git checkout "$rev"
cd - cd -
# Fast copy (hard-link) the source from the specific checkout # Fast copy (hard-link) the source from the specific checkout
# to the build dir. This relies on the fact that git unlinks # to the build dir. This relies on the fact that git unlinks
# during checkout, effectively implementing copy-on-write. # during checkout, effectively implementing copy-on-write.
cp -al $WORKSPACE/src src cp -al "$WORKSPACE/src" src
) 200>$WORKSPACE ) 200>"$WORKSPACE"
# run the (much longer) regular build process # run the (much longer) regular build process
make -C src make -C src
@ -579,11 +579,11 @@ This means the job script `/var/lib/laminar/cfg/jobs/myproject-test.run` can be
```bash ```bash
#!/bin/bash -e #!/bin/bash -e
ssh root@$TARGET_IP /bin/bash -xe <<"EOF" ssh "root@$TARGET_IP" /bin/bash -xe <<"EOF"
uname -a uname -a
... ...
EOF EOF
scp root@$TARGET_IP:result.xml "$ARCHIVE/" scp "root@$TARGET_IP:result.xml" "$ARCHIVE/"
``` ```
Don't forget to add the `laminar` user's public ssh key to the remote's `authorized_keys`. Don't forget to add the `laminar` user's public ssh key to the remote's `authorized_keys`.