この回答の目的は、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
[設定]> [シークレット]でシークレットを追加しましたが、それでよろしいですか?