Bu cevabın amacı, github eylemleriyle önbelleğe almanın nasıl yapılabileceğini göstermektir. Her zaman önbelleğin nasıl valgrind
gösterileceğini göstermek değil, aynı zamanda her şeyin önbelleğe alınamayacağını / önlenmemesi gerektiğini ve bağımlılığın yeniden yüklenmesine karşı bir önbelleğin önbelleğe alınması ve geri yüklenmesinin de dikkate alınması gerektiğini göz önünde bulundurmak gerekir.
Bunu yapmak için actions/cache
eylemden yararlanacaksınız.
Bir adım olarak ekleyin (valgrind'i kullanmadan önce):
- name: Cache valgrind
uses: actions/cache@v1.0.3
id: cache-valgrind
with:
path: "~/valgrind"
key: ${{secrets.VALGRIND_VERSION}}
Bir sonraki adım, varsa önbelleğe alınmış sürümü yüklemeye veya depolardan yüklemeye çalışmalıdır:
- name: Install valgrind
env:
CACHE_HIT: ${{steps.cache-valgrind.outputs.cache-hit}}
VALGRIND_VERSION: ${{secrets.VALGRIND_VERSION}}
run: |
if [[ "$CACHE_HIT" == 'true' ]]; then
sudo cp --verbose --force --recursive ~/valgrind/* /
else
sudo apt-get install --yes valgrind="$VALGRIND_VERSION"
mkdir -p ~/valgrind
sudo dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
fi
açıklama
VALGRIND_VERSION
Sırrı çıktı olarak ayarlayın :
apt-cache policy valgrind | grep -oP '(?<=Candidate:\s)(.+)'
bu, yeni bir sürüm yayınlandığında yalnızca sırrın değerini değiştirerek önbelleği geçersiz kılmanızı sağlar.
dpkg -L valgrind
kullanılırken yüklenen tüm dosyaları listelemek için kullanılır sudo apt-get install valgrind
.
Şimdi bu komutla yapabileceğimiz, tüm bağımlılıkları önbellek klasörünüze kopyalamaktır:
dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
ayrıca
Tüm bileşenlerini kopyalamaya ek olarak valgrind
, bağımlılıkları da kopyalamak gerekebilir ( libc
bu durumda olduğu gibi ), ancak bağımlılık zinciri oradan büyüdüğü için bu yol boyunca devam etmenizi önermiyorum. Kesin olmak gerekirse, nihayet valgrind'in çalışmasına uygun bir ortama sahip olmak için kopyalamak için gereken bağımlılıklar aşağıdaki gibidir:
Tüm bu bağımlılıkları kopyalamak için yukarıdakiyle aynı sözdizimini kullanabilirsiniz:
for dep in libc6 libgcc1 gcc-8-base; do
dpkg -L $dep | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
done
valgrind
İlk etapta kurmak için gereken her şey basitçe çalıştırmak olduğunda tüm bu işler gerçekten sorun çıkarmaya değer sudo apt-get install valgrind
mi? Amacınız derleme işlemini hızlandırmaksa, önbelleği geri yüklemek (indirmek ve çıkarmak) için gereken süreyi de dikkate almanız gerekir.valgrind
.
Ve son olarak önbelleği depolandığı varsayılarak geri yüklemek için şu /tmp/valgrind
komutu kullanabilirsiniz:
cp --force --recursive /tmp/valgrind/* /
Temel olarak önbellekten tüm dosyaları kök bölüme kopyalar.
Yukarıdaki sürece ek olarak, "önbelleğe alma valgrind" bir örnek yüklemek ve kaynağından derleyerek var. Önbellek şimdi yaklaşık 63MB (sıkıştırılmış) boyutundadır ve hala libc
hangi tür yenilgileri amaçlamak için ayrı olarak yüklenmesi gerekir .
Referanslar:
Cache not found for input keys: ***.
.VALGRIND_VERSION
Sırrı Ayarlar> Sırlar'a ekledim, değil mi?