Der Zweck dieser Antwort ist zu zeigen, wie das Caching mit Github-Aktionen durchgeführt werden kann. Nicht unbedingt, um zu zeigen, wie zwischengespeichert wird valgrind
, was es zeigt, sondern auch, um zu zeigen, dass nicht alles zwischengespeichert werden kann / sollte, und die Kompromisse zwischen dem Zwischenspeichern und Wiederherstellen eines Caches und dem erneuten Installieren der Abhängigkeit müssen berücksichtigt werden.
Sie werden die actions/cache
Aktion nutzen, um dies zu tun.
Fügen Sie es als Schritt hinzu (bevor Sie valgrind verwenden müssen):
- name: Cache valgrind
uses: actions/[email protected]
id: cache-valgrind
with:
path: "~/valgrind"
key: ${{secrets.VALGRIND_VERSION}}
Im nächsten Schritt sollte versucht werden, die zwischengespeicherte Version zu installieren oder über die Repositorys zu installieren:
- 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
Erläuterung
Setze das VALGRIND_VERSION
Geheimnis als Ausgabe von:
apt-cache policy valgrind | grep -oP '(?<=Candidate:\s)(.+)'
Auf diese Weise können Sie den Cache ungültig machen, wenn eine neue Version veröffentlicht wird, indem Sie einfach den Wert des Geheimnisses ändern.
dpkg -L valgrind
wird verwendet, um alle bei der Verwendung installierten Dateien aufzulisten sudo apt-get install valgrind
.
Mit diesem Befehl können wir jetzt alle Abhängigkeiten in unseren Cache-Ordner kopieren:
dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
Außerdem
Zusätzlich zum Kopieren aller Komponenten von valgrind
kann es auch erforderlich sein, die Abhängigkeiten zu kopieren (wie libc
in diesem Fall). Ich empfehle jedoch nicht, diesen Pfad fortzusetzen, da die Abhängigkeitskette nur von dort aus wächst. Um genau zu sein, müssen folgende Abhängigkeiten kopiert werden, um schließlich eine Umgebung zu erhalten, in der valgrind ausgeführt werden kann:
Um alle diese Abhängigkeiten zu kopieren, können Sie dieselbe Syntax wie oben verwenden:
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
Ist all diese Arbeit wirklich die Mühe wert, wenn alles, was für die Installation überhaupt erforderlich valgrind
ist, einfach ausgeführt werden muss sudo apt-get install valgrind
? Wenn Sie den Erstellungsprozess beschleunigen möchten, müssen Sie auch die Zeit berücksichtigen, die zum Wiederherstellen (Herunterladen und Extrahieren) des Caches erforderlich ist, anstatt den Befehl zur Installation einfach erneut auszuführen valgrind
.
Und schließlich /tmp/valgrind
können Sie den Befehl verwenden , um den Cache wiederherzustellen, vorausgesetzt, er ist dort gespeichert :
cp --force --recursive /tmp/valgrind/* /
Dadurch werden im Grunde alle Dateien aus dem Cache auf die Root-Partition kopiert.
Zusätzlich zu dem oben beschriebenen Prozess habe ich auch ein Beispiel für das "Zwischenspeichern von Valgrind" durch Installieren und Kompilieren aus dem Quellcode. Der Cache hat jetzt eine Größe von ungefähr 63 MB (komprimiert) und es muss noch separat installiert werden, libc
welche Art von Niederlage den Zweck erfüllt .
Verweise:
Cache not found for input keys: ***.
. Ich habe dasVALGRIND_VERSION
Geheimnis unter Einstellungen> Geheimnisse hinzugefügt , stimmt das?--2906-- Reading syms from /lib/x86_64-linux-gnu/ld-2.27.so --2906-- Considering /lib/x86_64-linux-gnu/ld-2.27.so .. --2906-- .. CRC mismatch (computed 1b7c895e wanted 2943108a) --2906-- object doesn't have a symbol table
valgrind
dielibc
Abhängigkeit nicht installiert wird, wenn der Cache abgerufen wird. Ich bin jetzt nicht in der Nähe eines Monitors, aber ich habe Ihren Fehler nachgeschlagen und es scheint, als wäre es ein Fehler mit Valgrind. Sie können auch versuchen, libc Version 6 zu installieren und prüfen, ob dies hilfreich ist. Ich werde die Antwort später heute aktualisierensudo apt-get install -y libc6-dbg
, funktioniert es gut, aber dann bin ich auch dort, wo ich angefangen habe, weil die Installation dieses Pakets noch 30 Sekunden dauert.Sie können ein Docker-Image mit
valgrind
vorinstalliertem erstellen und Ihren Workflow darauf ausführen.Erstellen Sie eine
Dockerfile
mit so etwas wie:Erstellen Sie es und schieben Sie es zu Dockerhub:
Verwenden Sie dann Folgendes wie Ihren Workflow:
Völlig ungetestet, aber Sie bekommen die Idee.
quelle