nix-home/.github/workflows/deploy.yml
2022-05-31 17:01:35 +00:00

136 lines
4.6 KiB
YAML

name: "Deploy to nki-personal"
on:
push:
branches:
- master
pull_request:
branches:
- master
types:
- opened
- synchronize
- reopened
- labeled
jobs:
test:
runs-on: ubuntu-latest
name: Check
steps:
- uses: actions/checkout@v2.3.4
- uses: cachix/install-nix-action@v17
with:
extra_nix_config: |
# save space on disk and in cache
auto-optimise-store = true
# keep all store paths necessary to build the outputs
keep-outputs = true
keep-derivations = true
# Enable flakes
experimental-features = nix-command flakes
- uses: actions/cache@v2
with:
key: nki-nix-${{ github.sha }}
restore-keys: |
nki-nix-
path: |
nix_store_dir
nix_store_db.sqlite
- name: restore cached nix store
run: |
if [ -e nix_store_db.sqlite ]; then
sudo systemctl stop nix-daemon
# put cached store paths back in their proper locations
sudo rm -rf /nix/store /nix/var/nix/db/db.sqlite
sudo mv nix_store_dir /nix/store
sudo cp nix_store_db.sqlite /nix/var/nix/db/db.sqlite
# fix store permissions
sudo chmod 1775 /nix/store
sudo chown root:nixbld /nix/store
sudo chmod 0644 /nix/var/nix/db/db.sqlite
sudo chown -R root:root /nix/store /nix/var/nix/db/db.sqlite
sudo systemctl start nix-daemon
fi
- name: Run format check
run: |
nix fmt
if [ -z "$(git status --untracked-files=no --porcelain)" ]; then
echo "Formatted, clean"
else
echo "The following files are unformatted:"
git status
false
fi
- name: prepare nix store for caching
run: |
# delete old stuff not relevant to this build
nix store gc
sudo systemctl stop nix-daemon
# move store to a place where the cache action can read it
sudo mv /nix/store nix_store_dir
sudo mv /nix/var/nix/db/db.sqlite nix_store_db.sqlite
deploy:
if: "github.event_name == 'push' || contains(github.event.pull_request.labels.*.name, 'Deploy')"
runs-on: ubuntu-latest
name: Deploy
steps:
- uses: actions/checkout@v2.3.4
- name: Add SSH key
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
mkdir -p /home/runner/.ssh
echo "${{ secrets.SSH_KEY }}" > /home/runner/.ssh/github_actions
echo "${{ secrets.NIX_DEPLOY_SSH_KEY }}" > /home/runner/.ssh/nix_deploy_key
chmod 600 /home/runner/.ssh/*
ssh-agent -a $SSH_AUTH_SOCK > /dev/null
ssh-add /home/runner/.ssh/*
ssh-keyscan ${{ secrets.INSTANCE_IP }} >> /home/runner/.ssh/known_hosts
- uses: cachix/install-nix-action@v17
with:
extra_nix_config: |
# save space on disk and in cache
auto-optimise-store = true
# keep all store paths necessary to build the outputs
keep-outputs = true
keep-derivations = true
# Enable flakes
experimental-features = nix-command flakes
# Deploy tokens
access-tokens = github.com=${{ secrets.GITHUB_TOKEN }}
- uses: actions/cache@v2
with:
key: nki-nix-${{ github.sha }}
restore-keys: |
nki-nix-
path: |
nix_store_dir
nix_store_db.sqlite
- name: restore cached nix store
run: |
if [ -e nix_store_db.sqlite ]; then
sudo systemctl stop nix-daemon
# put cached store paths back in their proper locations
sudo rm -rf /nix/store /nix/var/nix/db/db.sqlite
sudo mv nix_store_dir /nix/store
sudo cp nix_store_db.sqlite /nix/var/nix/db/db.sqlite
# fix store permissions
sudo chmod 1775 /nix/store
sudo chown root:nixbld /nix/store
sudo chmod 0644 /nix/var/nix/db/db.sqlite
sudo chown -R root:root /nix/store /nix/var/nix/db/db.sqlite
sudo systemctl start nix-daemon
fi
- name: Deploy with deploy-rs
env:
SSH_AUTH_SOCK: /tmp/ssh_agent.sock
run: |
nix run -L github:Serokell/deploy-rs . -- --hostname ${{ secrets.INSTANCE_IP }} -- -L
- name: prepare nix store for caching
run: |
# delete old stuff not relevant to this build
nix store gc
sudo systemctl stop nix-daemon
# move store to a place where the cache action can read it
sudo mv /nix/store nix_store_dir
sudo mv /nix/var/nix/db/db.sqlite nix_store_db.sqlite