Skip to content

Commit 42b14b8

Browse files
authored
Merge pull request cds-hooks#467 from buildpacks/fix-caching
Fix buildpack caching logic for API 0.6+
2 parents f3f0407 + aff5d92 commit 42b14b8

File tree

6 files changed

+29
-43
lines changed

6 files changed

+29
-43
lines changed

content/docs/buildpack-author-guide/create-buildpack/adding-bill-of-materials.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,10 @@ gem install bundler --no-ri --no-rdoc
148148
# 7. INSTALL GEMS
149149
# Compares previous Gemfile.lock checksum to the current Gemfile.lock
150150
bundlerlayer="$layersdir/bundler"
151-
local_bundler_checksum=$((sha256sum Gemfile.lock >/dev/null 2>&1 || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
151+
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
152152
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
153+
# Always set the types table so that we re-use the appropriate layers
154+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
153155
154156
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
155157
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -160,11 +162,7 @@ else
160162
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
161163
echo "---> Installing gems"
162164
mkdir -p "$bundlerlayer"
163-
cat > "$layersdir/bundler.toml" << EOL
164-
[types]
165-
cache = true
166-
launch = true
167-
165+
cat >> "$layersdir/bundler.toml" << EOL
168166
[metadata]
169167
checksum = "$local_bundler_checksum"
170168
EOL

content/docs/buildpack-author-guide/create-buildpack/caching.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,9 @@ bundlerlayer="$layersdir/bundler"
157157
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
158158
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
159159
160+
# Always set the types table so that we re-use the appropriate layers
161+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
162+
160163
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
161164
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
162165
echo "---> Reusing gems"
@@ -167,10 +170,6 @@ else
167170
echo "---> Installing gems"
168171
mkdir -p "$bundlerlayer"
169172
cat > "$layersdir/bundler.toml" << EOL
170-
[types]
171-
cache = true
172-
launch = true
173-
174173
[metadata]
175174
checksum = "$local_bundler_checksum"
176175
EOL
@@ -217,6 +216,8 @@ gem install bundler --no-ri --no-rdoc
217216
bundlerlayer="$layersdir/bundler"
218217
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
219218
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
219+
# Always set the types table so that we re-use the appropriate layers
220+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
220221
221222
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
222223
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -227,11 +228,7 @@ else
227228
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
228229
echo "---> Installing gems"
229230
mkdir -p "$bundlerlayer"
230-
cat > "$layersdir/bundler.toml" << EOL
231-
[types]
232-
cache = true
233-
launch = true
234-
231+
cat >> "$layersdir/bundler.toml" << EOL
235232
[metadata]
236233
checksum = "$local_bundler_checksum"
237234
EOL

content/docs/buildpack-author-guide/create-buildpack/make-buildpack-configurable.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -76,8 +76,10 @@ gem install bundler --no-ri --no-rdoc
7676
# 7. INSTALL GEMS
7777
# Compares previous Gemfile.lock checksum to the current Gemfile.lock
7878
bundlerlayer="$layersdir/bundler"
79-
local_bundler_checksum=$((sha256sum Gemfile.lock >/dev/null 2>&1 || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
79+
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
8080
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
81+
# Always set the types table so that we re-use the appropriate layers
82+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
8183
8284
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
8385
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -88,11 +90,7 @@ else
8890
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
8991
echo "---> Installing gems"
9092
mkdir -p "$bundlerlayer"
91-
cat > "$layersdir/bundler.toml" << EOL
92-
[types]
93-
cache = true
94-
launch = true
95-
93+
cat >> "$layersdir/bundler.toml" << EOL
9694
[metadata]
9795
checksum = "$local_bundler_checksum"
9896
EOL
@@ -145,4 +143,4 @@ Next, let's see how buildpacks can store information about the dependencies prov
145143
---
146144
147145
<a href="/docs/buildpack-author-guide/create-buildpack/adding-bill-of-materials" class="button bg-pink">Next Step</a>
148-
<!--+end+-->
146+
<!--+end+-->

katacoda/scenarios/buildpack-author-guide/adding-bill-of-materials.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,10 @@ gem install bundler --no-ri --no-rdoc
144144
# 7. INSTALL GEMS
145145
# Compares previous Gemfile.lock checksum to the current Gemfile.lock
146146
bundlerlayer="$layersdir/bundler"
147-
local_bundler_checksum=$((sha256sum Gemfile.lock >/dev/null 2>&1 || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
147+
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
148148
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
149+
# Always set the types table so that we re-use the appropriate layers
150+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
149151

150152
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
151153
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -156,11 +158,7 @@ else
156158
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
157159
echo "---> Installing gems"
158160
mkdir -p "$bundlerlayer"
159-
cat > "$layersdir/bundler.toml" << EOL
160-
[types]
161-
cache = true
162-
launch = true
163-
161+
cat >> "$layersdir/bundler.toml" << EOL
164162
[metadata]
165163
checksum = "$local_bundler_checksum"
166164
EOL

katacoda/scenarios/buildpack-author-guide/caching.md

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,9 @@ bundlerlayer="$layersdir/bundler"
153153
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
154154
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
155155
156+
# Always set the types table so that we re-use the appropriate layers
157+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
158+
156159
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
157160
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
158161
echo "---> Reusing gems"
@@ -163,10 +166,6 @@ else
163166
echo "---> Installing gems"
164167
mkdir -p "$bundlerlayer"
165168
cat > "$layersdir/bundler.toml" << EOL
166-
[types]
167-
cache = true
168-
launch = true
169-
170169
[metadata]
171170
checksum = "$local_bundler_checksum"
172171
EOL
@@ -213,6 +212,8 @@ gem install bundler --no-ri --no-rdoc
213212
bundlerlayer="$layersdir/bundler"
214213
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
215214
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
215+
# Always set the types table so that we re-use the appropriate layers
216+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
216217
217218
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
218219
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -223,11 +224,7 @@ else
223224
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
224225
echo "---> Installing gems"
225226
mkdir -p "$bundlerlayer"
226-
cat > "$layersdir/bundler.toml" << EOL
227-
[types]
228-
cache = true
229-
launch = true
230-
227+
cat >> "$layersdir/bundler.toml" << EOL
231228
[metadata]
232229
checksum = "$local_bundler_checksum"
233230
EOL

katacoda/scenarios/buildpack-author-guide/make-buildpack-configurable.md

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,10 @@ gem install bundler --no-ri --no-rdoc
7373
# 7. INSTALL GEMS
7474
# Compares previous Gemfile.lock checksum to the current Gemfile.lock
7575
bundlerlayer="$layersdir/bundler"
76-
local_bundler_checksum=$((sha256sum Gemfile.lock >/dev/null 2>&1 || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
76+
local_bundler_checksum=$((sha256sum Gemfile.lock || echo 'DOES_NOT_EXIST') | cut -d ' ' -f 1)
7777
remote_bundler_checksum=$(cat "$layersdir/bundler.toml" | yj -t | jq -r .metadata.checksum 2>/dev/null || echo 'DOES_NOT_EXIST')
78+
# Always set the types table so that we re-use the appropriate layers
79+
echo -e '[types]\ncache = true\nlaunch = true' >> "$layersdir/bundler.toml"
7880

7981
if [[ -f Gemfile.lock && $local_bundler_checksum == $remote_bundler_checksum ]] ; then
8082
# Determine if no gem dependencies have changed, so it can reuse existing gems without running bundle install
@@ -85,11 +87,7 @@ else
8587
# Determine if there has been a gem dependency change and install new gems to the bundler layer; re-using existing and un-changed gems
8688
echo "---> Installing gems"
8789
mkdir -p "$bundlerlayer"
88-
cat > "$layersdir/bundler.toml" << EOL
89-
[types]
90-
cache = true
91-
launch = true
92-
90+
cat >> "$layersdir/bundler.toml" << EOL
9391
[metadata]
9492
checksum = "$local_bundler_checksum"
9593
EOL

0 commit comments

Comments
 (0)