Add [NO CACHE] and [CLEAR CACHE] to commit message options to control plugin behavior, use separate cache for matrix jobs. Fixes #3

This commit is contained in:
Michael de Wit
2017-02-01 14:42:43 +01:00
parent 53828b706c
commit 4ce79429c6
3 changed files with 26 additions and 7 deletions
+6
View File
@@ -35,3 +35,9 @@ pipeline:
```
The example above illustrates a typical Node.js project Drone configuration. It caches the `./node_modules` directory to a mounted volume on the host system: `/tmp/cache`. This prevents `npm` from downloading and installing the dependencies for every build.
## Clearing Cache
Should you want to clear the cache for a project, you can do so by including `[CLEAR CACHE]` in the commit message. The entire cache folder for the project will be cleared before it is restored. The rebuilding of cache will proceed as normal.
## Skipping Cache
If you want to run a build without using cache, put `[NO CACHE]` in the commit message. Both the restoring and rebuilding of cache will be skipped. Your cache will remain intact.
+1
View File
@@ -21,6 +21,7 @@ docker run --rm \
-e PLUGIN_MOUNT="./node_modules" \
-e DRONE_REPO_OWNER="foo" \
-e DRONE_REPO_NAME="bar" \
-e DRONE_JOB_NUMBER=0 \
-v $(pwd):$(pwd) \
-v /tmp/cache:/cache \
-w $(pwd) \
+19 -7
View File
@@ -2,24 +2,36 @@
if [ -z "$PLUGIN_MOUNT" ]; then
echo "Specify folders to cache in the mount property! Plugin won't do anything!"
exit 0;
exit 0
fi
if [[ $DRONE_COMMIT_MESSAGE == *"[CLEAR CACHE]"* && -n "$PLUGIN_RESTORE" && "$PLUGIN_RESTORE" == "true" ]]; then
if [ -d "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME" ]; then
echo "Found [CLEAR CACHE] in commit message, clearing cache!"
rm -rf "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME"
fi
fi
if [[ $DRONE_COMMIT_MESSAGE == *"[NO CACHE]"* ]]; then
echo "Found [NO CACHE] in commit message, skipping cache restore and rebuild!"
exit 0
fi
IFS=','; read -ra SOURCES <<< "$PLUGIN_MOUNT"
if [ -n "$PLUGIN_REBUILD" ]; then
if [[ -n "$PLUGIN_REBUILD" && "$PLUGIN_REBUILD" == "true" ]]; then
# Create cache
for source in "${SOURCES[@]}"; do
echo "Rebuilding cache for $source..."
mkdir -p "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$source" && \
rsync -aHAX --delete "$source/" "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$source"
mkdir -p "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$DRONE_JOB_NUMBER/$source" && \
rsync -aHAX --delete "$source/" "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$DRONE_JOB_NUMBER/$source"
done
elif [ -n "$PLUGIN_RESTORE" ]; then
elif [[ -n "$PLUGIN_RESTORE" && "$PLUGIN_RESTORE" == "true" ]]; then
# Restore from cache
for source in "${SOURCES[@]}"; do
if [ -d "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$source" ]; then
if [ -d "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$DRONE_JOB_NUMBER/$source" ]; then
echo "Restoring cache for $source..."
mkdir -p "$source" && \
rsync -aHAX --delete "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$source/" "$source"
rsync -aHAX --delete "/cache/$DRONE_REPO_OWNER/$DRONE_REPO_NAME/$DRONE_JOB_NUMBER/$source/" "$source"
else
echo "No cache for $source"
fi