feat: [pt1.] version cmd #656
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Our desired pipeline using only a Nix shell environment | |
name: Check and build Kardinal | |
on: | |
push: | |
branches: | |
- main | |
tags: | |
- "v*.*.*" | |
paths-ignore: | |
- "website/**" | |
- "**/README.md" | |
pull_request: | |
branches: | |
- main | |
paths-ignore: | |
- "website/**" | |
- "**/README.md" | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
cancel-in-progress: true | |
env: | |
MAIN_BRANCH: ${{ 'refs/heads/main' }} | |
jobs: | |
check_nix: | |
name: Basic Check | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: git checkout | |
uses: actions/checkout@v3 | |
- name: Install Nix | |
uses: DeterminateSystems/nix-installer-action@main | |
- name: Magic cache | |
uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Check Nixpkgs inputs | |
uses: DeterminateSystems/flake-checker-action@main | |
with: | |
fail-mode: true | |
# Nix-specific logic begins here | |
- name: Nix Check | |
run: | | |
nix flake check | |
- name: Check Go tidiness | |
run: | | |
git reset --hard | |
git clean -f | |
nix develop --command go-tidy-all | |
export changed_files=$(git diff-files --name-only | grep -cv ".toml$") | |
if [[ $changed_files != 0 ]]; then | |
echo "Go modules are not so tidy (run 'go-tidy-all' to fix it):" | |
git diff-files --name-only | |
exit 1 | |
fi | |
- name: Check Go formatting | |
run: | | |
git reset --hard | |
git clean -f | |
nix develop --command test -z $(gofmt -l .) | |
build_publish_images: | |
name: Test, build and publish images | |
needs: check_nix | |
runs-on: ubuntu-22.04 | |
steps: | |
- name: git checkout | |
uses: actions/checkout@v3 | |
- name: Install Nix | |
uses: DeterminateSystems/nix-installer-action@main | |
- name: Magic cache | |
uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Build Kardinal Manager images | |
run: | | |
nix build ./#containers.x86_64-linux.kardinal-manager.arm64 --no-link --print-out-paths | |
nix build ./#containers.x86_64-linux.kardinal-manager.amd64 --no-link --print-out-paths | |
- name: Build Kardinal CLI images | |
run: | | |
nix build ./#containers.x86_64-linux.kardinal-cli.arm64 --no-link --print-out-paths | |
nix build ./#containers.x86_64-linux.kardinal-cli.amd64 --no-link --print-out-paths | |
- name: Build Redis Sidecar images | |
run: | | |
nix build ./#containers.x86_64-linux.redis-proxy-overlay.arm64 --no-link --print-out-paths | |
nix build ./#containers.x86_64-linux.redis-proxy-overlay.amd64 --no-link --print-out-paths | |
- name: Login to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Publish images | |
if: github.ref == env.MAIN_BRANCH | |
run: | | |
nix run ./#publish-kardinal-manager-container | |
nix run ./#publish-kardinal-cli-container | |
nix run ./#publish-redis-proxy-overlay-container | |
build_clis: | |
name: Test and build cross-compiled clis | |
needs: check_nix | |
runs-on: ubuntu-22.04 | |
strategy: | |
matrix: | |
os: [linux, darwin, windows] | |
arch: [amd64, arm64] | |
steps: | |
- name: git checkout | |
uses: actions/checkout@v3 | |
- name: Install Nix | |
uses: DeterminateSystems/nix-installer-action@main | |
- name: Magic cache | |
uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Build cli | |
run: | | |
result=$(nix build ./#cross-compiled-cli.x86_64-linux.${{ matrix.os }}.${{ matrix.arch }} --no-link --print-out-paths) | |
path=$(find $result -name 'kardinal.cli*' -type f | head -n 1) | |
if [[ "${{ matrix.os }}" == "windows" ]]; then | |
binout="/tmp/kardinal-${{ matrix.os }}-${{ matrix.arch }}.exe" | |
else | |
binout="/tmp/kardinal-${{ matrix.os }}-${{ matrix.arch }}" | |
fi | |
ls -lah $path | |
ln -s $path $binout | |
ls -lah $binout | |
[ -s $binout ] | |
test_cli_install: | |
strategy: | |
matrix: | |
shell: [bash, fish, zsh] | |
runs-on: ubuntu-latest | |
steps: | |
- name: git checkout | |
uses: actions/checkout@v3 | |
- name: Install ShellCheck and shells | |
run: | | |
sudo apt-get update | |
sudo apt-get install -y shellcheck fish zsh | |
- name: Run ShellCheck | |
run: shellcheck ./scripts/install_cli.sh | |
- name: Run install script with ${{ matrix.shell }} | |
run: | | |
if [ "${{ matrix.shell }}" = "fish" ]; then | |
fish -c 'set -gx SHELL (which fish); cat ./scripts/install_cli.sh | bash' | |
elif [ "${{ matrix.shell }}" = "zsh" ]; then | |
zsh -c 'export SHELL=$(which zsh); cat ./scripts/install_cli.sh | bash' | |
elif [ "${{ matrix.shell }}" = "bash" ]; then | |
bash -c 'export SHELL=$(which bash); cat ./scripts/install_cli.sh | bash' | |
else | |
echo "Unsupported shell: ${{ matrix.shell }}" | |
exit 1 | |
fi | |
- name: Check if ~/.local/bin exists | |
run: | | |
if [ ! -d ~/.local/bin ]; then | |
echo "~/.local/bin directory was not created" | |
exit 1 | |
fi | |
- name: Check if config was added | |
run: | | |
if [ "${{ matrix.shell }}" = "fish" ]; then | |
config_file="$HOME/.config/fish/config.fish" | |
elif [ "${{ matrix.shell }}" = "zsh" ]; then | |
config_file="$HOME/.zshrc" | |
else | |
config_file="$HOME/.bashrc" | |
fi | |
if ! grep -q "# Kardinal CLI config" "$config_file"; then | |
echo "CLI tool configuration was not added to $config_file" | |
cat "$config_file" | |
exit 1 | |
fi | |
- name: Verify kardinal command | |
run: | | |
if [ "${{ matrix.shell }}" = "fish" ]; then | |
fish -c 'source ~/.config/fish/config.fish; if kardinal | grep -q "Kardinal CLI"; exit 0; else; exit 1; end' | |
elif [ "${{ matrix.shell }}" = "zsh" ]; then | |
zsh -c 'source ~/.zshrc; if kardinal | grep -q "Kardinal CLI"; then exit 0; else exit 1; fi' | |
else | |
bash -c 'source ~/.bashrc; if kardinal | grep -q "Kardinal CLI"; then exit 0; else exit 1; fi' | |
fi |