この回答の目的は、githubアクションでキャッシングを行う方法を示すことです。必ずしもキャッシュする方法を示す必要はありませんvalgrindが、すべてをキャッシュできる/すべきでないことを示し、キャッシュのキャッシュと復元と依存関係の再インストールのトレードオフを考慮する必要があります。
actions/cacheこれを行うには、アクションを使用します。
ステップとして追加します(valgrindを使用する必要がある前):
- name: Cache valgrind
uses: actions/cache@v1.0.3
id: cache-valgrind
with:
path: "~/valgrind"
key: ${{secrets.VALGRIND_VERSION}}
次のステップでは、キャッシュされたバージョンをインストールするか、リポジトリからインストールする必要があります。
- 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
説明
VALGRIND_VERSIONシークレットを次の出力に設定します。
apt-cache policy valgrind | grep -oP '(?<=Candidate:\s)(.+)'
これにより、シークレットの値を変更するだけで、新しいバージョンがリリースされたときにキャッシュを無効にすることができます。
dpkg -L valgrindを使用するときにインストールされるすべてのファイルをリストするために使用されますsudo apt-get install valgrind。
このコマンドで実行できるのは、すべての依存関係をキャッシュフォルダーにコピーすることです。
dpkg -L valgrind | while IFS= read -r f; do if test -f $f; then echo $f; fi; done | xargs cp --parents --target-directory ~/valgrind/
さらに
のすべてのコンポーネントをコピーすることに加えてvalgrind、依存関係をコピーする必要がある場合もあります(libcこの場合など)が、依存関係チェーンはそこから拡大するだけなので、このパスに沿って続行することはお勧めしません。正確には、valgrindを実行するのに適した環境を最終的に作成するためにコピーする必要がある依存関係は次のとおりです。
これらすべての依存関係をコピーするには、上記と同じ構文を使用できます。
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最初にインストールするために必要なのは単に実行することだけである場合、このすべての作業は本当に問題の価値がありますsudo apt-get install valgrindか?ビルドプロセスを高速化することが目的の場合は、キャッシュを復元(ダウンロードおよび抽出)するのにかかる時間と、コマンドを再度実行してインストールするのにかかる時間も考慮する必要がありますvalgrind。
最後に、キャッシュがに保存されていると想定して、キャッシュを復元するには/tmp/valgrind、次のコマンドを使用できます。
cp --force --recursive /tmp/valgrind/* /
これは基本的にすべてのファイルをキャッシュからルートパーティションにコピーします。
上記のプロセスに加えて、ソースからインストールしてコンパイルすることにより、「valgrindをキャッシュする」例もあります。キャッシュのサイズは約63MB(圧縮)になりましたlibcが、目的を達成するために、個別にインストールする必要があります。
参照:
Cache not found for input keys: ***.ます。VALGRIND_VERSION[設定]> [シークレット]でシークレットを追加しましたが、それでよろしいですか?