Test caching

This commit is contained in:
Tom Foster 2024-04-23 15:34:26 +01:00
parent 7f5fb25627
commit ae39a9f80d

View file

@ -33,12 +33,11 @@ jobs:
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Retrieve persistent `/nix/store` - name: Retrieve persistent `/nix/store`
uses: actions/cache@v3 uses: actions/cache@v4
with: with:
path: /nix/store
key: ${{ runner.os }}-nix-store }} key: ${{ runner.os }}-nix-store }}
restore-keys: | path: /nix/store
${{ runner.os }}-nix-store
- name: Install Nix (with flakes and nix-command enabled) - name: Install Nix (with flakes and nix-command enabled)
uses: cachix/install-nix-action@v26 uses: cachix/install-nix-action@v26
with: with:
@ -62,9 +61,6 @@ jobs:
echo "extra-substituters = ${{ env.ATTIC_ENDPOINT }}" >> /etc/nix/nix.conf echo "extra-substituters = ${{ env.ATTIC_ENDPOINT }}" >> /etc/nix/nix.conf
echo "extra-trusted-public-keys = ${{ env.ATTIC_PUBLIC_KEY }}" >> /etc/nix/nix.conf echo "extra-trusted-public-keys = ${{ env.ATTIC_PUBLIC_KEY }}" >> /etc/nix/nix.conf
- name: Set up Nix magic cache
uses: DeterminateSystems/magic-nix-cache-action@v4
- name: Install and activate `direnv` - name: Install and activate `direnv`
run: | run: |
echo 'source $HOME/.nix-profile/share/nix-direnv/direnvrc' > "$HOME/.direnvrc" echo 'source $HOME/.nix-profile/share/nix-direnv/direnvrc' > "$HOME/.direnvrc"
@ -74,210 +70,3 @@ jobs:
run: | run: |
nix develop --command true nix develop --command true
direnv allow direnv allow
- name: Run CI tests
run: |
direnv exec . engage
- name: Pre-build x86_64 dependencies
run: >
bin/nix-build-and-cache
.#rocksdb-static-x86_64-unknown-linux-musl
.#conduit-deps-static-x86_64-unknown-linux-musl
- name: Pre-build aarch64 dependencies
run: >
bin/nix-build-and-cache
.#rocksdb-static-aarch64-unknown-linux-musl
.#conduit-deps-static-aarch64-unknown-linux-musl
- name: Build static targets
run: >
bin/nix-build-and-cache
.#static-x86_64-unknown-linux-musl
.#static-x86_64-unknown-linux-musl-jemalloc
.#static-aarch64-unknown-linux-musl
.#static-aarch64-unknown-linux-musl-jemalloc
- name: Organise and prepare static outputs
run: |
mkdir -p target/debian
mv result/bin/conduit target/static-x86_64-unknown-linux-musl
direnv exec . cargo deb --no-build --no-strip --output target/debian/x86_64-unknown-linux-musl.deb
mv result-1/bin/conduit target/static-x86_64-unknown-linux-musl-jemalloc
direnv exec . cargo deb --no-build --no-strip --output target/debian/x86_64-unknown-linux-musl-jemalloc.deb
mv result-2/bin/conduit target/static-aarch64-unknown-linux-musl
direnv exec . cargo deb --no-build --no-strip --output target/debian/aarch64-unknown-linux-musl.deb
mv result-3/bin/conduit target/static-aarch64-unknown-linux-musl-jemalloc
direnv exec . cargo deb --no-build --no-strip --output target/debian/aarch64-unknown-linux-musl-jemalloc.deb
mv target/debian/*.deb target/
rm -rf target/debian
- name: Upload static-x86_64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: static-x86_64-unknown-linux-musl
path: target/static-x86_64-unknown-linux-musl
if-no-files-found: error
- name: Upload static-x86_64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: static-x86_64-unknown-linux-musl-jemalloc
path: target/static-x86_64-unknown-linux-musl-jemalloc
if-no-files-found: error
- name: Upload static-aarch64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: static-aarch64-unknown-linux-musl
path: target/static-aarch64-unknown-linux-musl
if-no-files-found: error
- name: Upload static-aarch64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: static-aarch64-unknown-linux-musl-jemalloc
path: target/static-aarch64-unknown-linux-musl-jemalloc
if-no-files-found: error
- name: Upload deb x86_64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: x86_64-unknown-linux-musl.deb
path: target/x86_64-unknown-linux-musl.deb
if-no-files-found: error
- name: Upload deb x86_64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: x86_64-unknown-linux-musl-jemalloc.deb
path: target/x86_64-unknown-linux-musl-jemalloc.deb
if-no-files-found: error
- name: Upload deb aarch64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: aarch64-unknown-linux-musl.deb
path: target/aarch64-unknown-linux-musl.deb
if-no-files-found: error
- name: Upload deb aarch64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: aarch64-unknown-linux-musl-jemalloc.deb
path: target/aarch64-unknown-linux-musl-jemalloc.deb
if-no-files-found: error
- name: Build OCI image targets
run: >
bin/nix-build-and-cache
.#oci-image-x86_64-unknown-linux-musl
.#oci-image-x86_64-unknown-linux-musl-jemalloc
.#oci-image-aarch64-unknown-linux-musl
.#oci-image-aarch64-unknown-linux-musl-jemalloc
- name: Organise OCI image outputs
run: |
mv result oci-image-x86_64-unknown-linux-musl.tar.gz
mv result-1 oci-image-x86_64-unknown-linux-musl-jemalloc.tar.gz
mv result-2 oci-image-aarch64-unknown-linux-musl.tar.gz
mv result-3 oci-image-aarch64-unknown-linux-musl-jemalloc.tar.gz
- name: Upload OCI image x86_64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: oci-image-x86_64-unknown-linux-musl.tar.gz
path: oci-image-x86_64-unknown-linux-musl.tar.gz
if-no-files-found: error
compression-level: 0
- name: Upload OCI image x86_64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: oci-image-x86_64-unknown-linux-musl-jemalloc.tar.gz
path: oci-image-x86_64-unknown-linux-musl-jemalloc.tar.gz
if-no-files-found: error
compression-level: 0
- name: Upload OCI image aarch64-unknown-linux-musl
uses: actions/upload-artifact@v4
with:
name: oci-image-aarch64-unknown-linux-musl.tar.gz
path: oci-image-aarch64-unknown-linux-musl.tar.gz
if-no-files-found: error
compression-level: 0
- name: Upload OCI image aarch64-unknown-linux-musl-jemalloc
uses: actions/upload-artifact@v4
with:
name: oci-image-aarch64-unknown-linux-musl-jemalloc.tar.gz
path: oci-image-aarch64-unknown-linux-musl-jemalloc.tar.gz
if-no-files-found: error
compression-level: 0
- name: Load OCI Images and tag
run: |
ID_AARCH64=$(docker load -i oci-image-aarch64-unknown-linux-musl-jemalloc.tar.gz | sed -n 's/Loaded image: \(.*\)/\1/p')
docker tag $ID_AARCH64 conduwuit:${{ github.sha }}-aarch64-jemalloc
ID_X86_64=$(docker load -i oci-image-x86_64-unknown-linux-musl-jemalloc.tar.gz | sed -n 's/Loaded image: \(.*\)/\1/p')
docker tag $ID_X86_64 conduwuit:${{ github.sha }}-x86_64-jemalloc
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create and push combined manifest to GitHub
run: |
REPO_GHCR="ghcr.io/${{ github.repository }}"
SHA_TAG="${{ github.ref_name }}-${{ github.sha }}"
BRANCH_TAG="${{ github.ref_name }}"
if [ "$BRANCH_TAG" == "main" ]; then
BRANCH_TAG="latest"
fi
docker manifest create $REPO_GHCR:$SHA_TAG \
--amend conduwuit:${{ github.sha }}-x86_64-jemalloc \
--amend conduwuit:${{ github.sha }}-aarch64-jemalloc
docker manifest push $REPO_GHCR:$SHA_TAG
docker manifest create $REPO_GHCR:$BRANCH_TAG \
--amend conduwuit:${{ github.sha }}-x86_64-jemalloc \
--amend conduwuit:${{ github.sha }}-aarch64-jemalloc
docker manifest push $REPO_GHCR:$BRANCH_TAG
- name: Login to Docker Hub
uses: docker/login-action@v3
env:
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKER_USERNAME: ${{ vars.DOCKER_USERNAME }}
if: ${{ (env.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
with:
username: ${{ env.DOCKER_USERNAME }}
password: ${{ env.DOCKERHUB_TOKEN }}
- name: Create and push combined manifest to Docker Hub
env:
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DOCKER_USERNAME: ${{ vars.DOCKER_USERNAME }}
if: ${{ (env.DOCKER_USERNAME != '') && (env.DOCKERHUB_TOKEN != '') }}
run: |
REPO_DOCKER="docker.io/${{ github.repository }}"
SHA_TAG="${{ github.ref_name }}-${{ github.sha }}"
BRANCH_TAG="${{ github.ref_name }}"
if [ "$BRANCH_TAG" == "main" ]; then
BRANCH_TAG="latest"
fi
docker manifest create $REPO_DOCKER:$SHA_TAG \
--amend conduwuit:${{ github.sha }}-x86_64-jemalloc \
--amend conduwuit:${{ github.sha }}-aarch64-jemalloc
docker manifest push $REPO_DOCKER:$SHA_TAG
docker manifest create $REPO_DOCKER:$BRANCH_TAG \
--amend conduwuit:${{ github.sha }}-x86_64-jemalloc \
--amend conduwuit:${{ github.sha }}-aarch64-jemalloc
docker manifest push $REPO_DOCKER:$BRANCH_TAG