Skip to content

Quickstart Test

Quickstart Test #293

name: Quickstart Test
on:
workflow_dispatch:
schedule:
- cron: "2 0 * * *"
push:
branches:
- master
paths:
- "metadata-ingestion/src/datahub/cli/docker_cli.py"
- "metadata-ingestion/src/datahub/cli/docker_check.py"
- "metadata-ingestion/src/datahub/cli/quickstart_versioning.py"
- ".github/workflows/quickstart-test.yml"
- "docker/quickstart/*"
pull_request:
paths:
- "metadata-ingestion/src/datahub/cli/docker_cli.py"
- "metadata-ingestion/src/datahub/cli/docker_check.py"
- "metadata-ingestion/src/datahub/cli/quickstart_versioning.py"
- ".github/workflows/quickstart-test.yml"
- "docker/quickstart/*"
jobs:
test-quickstart-pr:
name: Quickstart Smoke Tests
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Checkout repository
uses: actions/checkout@v6
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install dependencies
run: |
./gradlew :metadata-ingestion:install
- name: Run quickstart
run: |
source metadata-ingestion/venv/bin/activate
# Use compose and version mapping files from PR
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml
docker images
- name: Run quickstart check
run: |
source metadata-ingestion/venv/bin/activate
datahub docker check
- name: Smoke test
if: false
env:
RUN_QUICKSTART: false
DATAHUB_VERSION: head
CLEANUP_DATA: "false"
TEST_STRATEGY: cypress
BATCH_COUNT: 30
BATCH_NUMBER: 2
run: |
echo "$DATAHUB_VERSION"
./gradlew --stop
./smoke-test/smoke.sh
- name: Run quickstart check
run: |
source metadata-ingestion/venv/bin/activate
datahub docker check
test-quickstart-pr-compatiblity-checks:
name: Quickstart compatiliby Tests
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: install older datahub cli
run: |
pip install acryl-datahub==1.0
- name: bring up datahub using old cli
run: |
datahub docker quickstart --version v1.2.0
datahub docker check
datahub docker ingest-sample-data
datahub docker check
- name: Checkout repository
uses: actions/checkout@v6
- name: Install dependencies
run: |
./gradlew :metadata-ingestion:install
- name: Run quickstart
run: |
source metadata-ingestion/venv/bin/activate
# Use compose and version mapping files from PR
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
if datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml; then
echo "Command succeeded when it should have failed"
exit 1
else
echo "Command failed as expected"
fi
- name: Backup, nuke and restart and restore
run: |
source metadata-ingestion/venv/bin/activate
echo "Running backup"
datahub docker quickstart --backup
echo "Running nuke"
datahub docker nuke
# Use compose and version mapping files from PR
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
echo "Running quickstart"
datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml
echo "Running restore"
echo "y" | datahub docker quickstart --restore
datahub docker check
test-quickstart-regression:
name: Verify upgrades work with latest CLI
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-latest
strategy:
matrix:
# TODO: once more supported versions are added, this should become list last n versions
datahub_version: ["v1.1.0", "v1.2.0", "v1.3.0.1", "head"]
fail-fast: false
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: install datahub cli
run: |
pip install acryl-datahub
- name: bring up older version datahub
run: |
datahub docker quickstart --version ${{ matrix.datahub_version }}
datahub docker check
datahub docker ingest-sample-data
datahub docker check
- name: Backup, nuke and restart and restore
run: |
echo "Running backup"
datahub docker quickstart --backup
echo "Running nuke"
datahub docker nuke
datahub docker quickstart
echo "Running restore"
echo "y" | datahub docker quickstart --restore
datahub docker check
test-quickstart-regression-unsupported-versions:
name: Verifiy handling of unsupported older versions
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-latest
strategy:
matrix:
# TODO: last n unsupported versions to be added here
datahub_version: ["v1.0.0"]
fail-fast: false
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: install datahub cli
run: |
pip install acryl-datahub
- name: bring up datahub
run: |
if datahub docker quickstart --version ${{ matrix.datahub_version }}; then
echo "Command succeeded when it should have failed"
exit 1
else
echo "Command failed as expected"
fi
test-quickstart-regression-old-cli:
name: Verify migration from old-cli deployments
if: ${{ github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' }}
runs-on: ubuntu-latest
strategy:
matrix:
# TODO: once more supported versions are aded, this should become list last n versions
datahub_version: ["v1.1.0", "v1.2.0"]
fail-fast: false
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: install datahub cli
run: |
pip install acryl-datahub==${{ matrix.datahub_version }}
- name: bring up datahub using old cli
run: |
datahub docker quickstart --version ${{ matrix.datahub_version }}
datahub docker check
datahub docker ingest-sample-data
datahub docker check
- name: Backup, nuke and restart and restore
run: |
echo "Running backup"
datahub docker quickstart --backup
echo "Running nuke"
datahub docker nuke
# Install latest version of datahub cli
pip install --upgrade acryl-datahub
datahub docker quickstart
echo "Running restore"
echo "y" | datahub docker quickstart --restore
datahub docker check
test-docker-compose-version-compatibility:
name: Docker Compose Version Compatibility
if: ${{ github.event_name == 'pull_request' }}
runs-on: ubuntu-latest
strategy:
matrix:
include:
# Test v1.x standalone - should FAIL (unsupported)
- compose_version: "1.29.2"
compose_type: "standalone"
should_fail: true
# Test v2.x plugin - should SUCCEED
- compose_version: "v2.20.0"
compose_type: "plugin"
should_fail: false
- compose_version: "v2.24.0"
compose_type: "plugin"
should_fail: false
# Test v2.x standalone (backward compatibility mode) - should SUCCEED
- compose_version: "v2.24.0"
compose_type: "standalone"
should_fail: false
# Test v5.x plugin - should SUCCEED (forward compatibility)
- compose_version: "v5.0.1"
compose_type: "plugin"
should_fail: false
fail-fast: false
steps:
- name: Free up disk space
run: |
sudo apt-get remove 'dotnet-*' azure-cli || true
sudo rm -rf /usr/local/lib/android/ || true
sudo docker image prune -a -f || true
- name: Checkout repository
uses: actions/checkout@v6
- name: Install Docker Compose (standalone mode)
if: matrix.compose_type == 'standalone'
run: |
# Find and remove ALL docker compose plugins
echo "Searching for docker compose plugin installations..."
find / -name "docker-compose" -type f 2>/dev/null | grep -E "(cli-plugins|docker/cli)" || true
# Remove known plugin locations
rm -rf ~/.docker/cli-plugins/docker-compose
sudo rm -rf /usr/local/lib/docker/cli-plugins/docker-compose
sudo rm -rf /usr/lib/docker/cli-plugins/docker-compose
sudo rm -rf /usr/libexec/docker/cli-plugins/docker-compose
sudo rm -rf /usr/local/libexec/docker/cli-plugins/docker-compose
# Also remove the entire cli-plugins directory to be thorough
rm -rf ~/.docker/cli-plugins
sudo rm -rf /usr/local/lib/docker/cli-plugins
sudo rm -rf /usr/lib/docker/cli-plugins
sudo rm -rf /usr/libexec/docker/cli-plugins
sudo rm -rf /usr/local/libexec/docker/cli-plugins
# Install standalone docker-compose (works for v1.x and v2.x)
sudo curl -L "https://github.com/docker/compose/releases/download/${{ matrix.compose_version }}/docker-compose-$(uname -s)-$(uname -m)" \
-o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# Verify installation
docker-compose --version
# Verify plugin is NOT available (ensures we're testing standalone mode only)
if docker compose version 2>/dev/null; then
echo "ERROR: docker compose plugin still available after removal!"
echo "Plugin location:"
which docker || echo "docker binary not found"
find / -name "docker-compose" -type f 2>/dev/null | grep -E "(cli-plugins|docker/cli)" || true
docker compose version
exit 1
fi
echo "SUCCESS: Only standalone docker-compose is available"
- name: Install Docker Compose v2+ (plugin)
if: matrix.compose_type == 'plugin'
run: |
# Remove existing docker-compose standalone if present
sudo rm -f /usr/local/bin/docker-compose
# Install specific version of docker compose plugin
DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
mkdir -p "$DOCKER_CONFIG/cli-plugins"
curl -SL "https://github.com/docker/compose/releases/download/${{ matrix.compose_version }}/docker-compose-linux-x86_64" \
-o "$DOCKER_CONFIG/cli-plugins/docker-compose"
chmod +x "$DOCKER_CONFIG/cli-plugins/docker-compose"
# Verify installation
docker compose version
- name: Verify Docker Compose installation
run: |
echo "=== Docker Compose Version Information ==="
if command -v docker-compose &> /dev/null; then
echo "Standalone docker-compose found:"
docker-compose --version
fi
if docker compose version &> /dev/null; then
echo "Docker compose plugin found:"
docker compose version
docker compose version --short
fi
echo "========================================"
- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.10"
- name: Install dependencies
run: |
./gradlew :metadata-ingestion:install
- name: Test quickstart (expecting failure for v1.x)
if: matrix.should_fail
run: |
source metadata-ingestion/venv/bin/activate
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
# Run quickstart and capture output (don't fail on error)
set +e
datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml 2>&1 | tee output.log
set -e
# Check if the version error message is present in the output
if grep -q "require Docker Compose v2 or later" output.log; then
echo "SUCCESS: Error message correctly indicates v2 or later required"
echo "Output contained the expected v1.x rejection message"
exit 0
else
echo "ERROR: Expected v1.x rejection message not found in output"
echo "This means either:"
echo " 1. Docker Compose v1.x was not properly isolated (v2 plugin still present)"
echo " 2. The version check is not working correctly"
echo ""
echo "Full output:"
cat output.log
exit 1
fi
- name: Test quickstart (expecting success for v2+ and v5)
if: "!matrix.should_fail"
run: |
source metadata-ingestion/venv/bin/activate
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml
- name: Run quickstart check
if: "!matrix.should_fail"
run: |
source metadata-ingestion/venv/bin/activate
datahub docker check
- name: Test nuke and restart
if: "!matrix.should_fail"
run: |
source metadata-ingestion/venv/bin/activate
echo "Running nuke"
datahub docker nuke
echo "Running quickstart again"
export FORCE_LOCAL_QUICKSTART_MAPPING=docker/quickstart/quickstart_version_mapping.yaml
datahub docker quickstart -f docker/quickstart/docker-compose.quickstart-profile.yml
datahub docker check