Skip to content

CI: add sftp store testing, fixes #64 #200

CI: add sftp store testing, fixes #64

CI: add sftp store testing, fixes #64 #200

Workflow file for this run

# badge: https://github.com/borgbackup/borgstore/workflows/CI/badge.svg?branch=master
name: CI
on:
push:
branches: [ master ]
paths:
- '**.py'
- '**.yml'
- '**.toml'
- '**.cfg'
- '**.ini'
- 'requirements.d/*'
- '!docs/**'
pull_request:
branches: [ master ]
paths:
- '**.py'
- '**.yml'
- '**.toml'
- '**.cfg'
- '**.ini'
- 'requirements.d/*'
- '!docs/**'
jobs:
linux:
strategy:
fail-fast: true
matrix:
include:
- os: ubuntu-24.04
python-version: '3.13'
toxenv: py313
env:
TOXENV: ${{ matrix.toxenv }}
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
# just fetching 1 commit is not enough for setuptools-scm, so we fetch all
fetch-depth: 0
- name: Install Linux packages
run: |
sudo apt-get update
sudo apt-get install -y rclone openssh-server
- name: Configure OpenSSH SFTP server (test only)
run: |
sudo mkdir -p /run/sshd
sudo useradd -m -s /bin/bash sftpuser || true
# Create SSH key for the CI user and authorize it for sftpuser
mkdir -p ~/.ssh
chmod 700 ~/.ssh
test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -N '' -f ~/.ssh/id_ed25519
sudo mkdir -p /home/sftpuser/.ssh
sudo chmod 700 /home/sftpuser/.ssh
sudo cp ~/.ssh/id_ed25519.pub /home/sftpuser/.ssh/authorized_keys
sudo chown -R sftpuser:sftpuser /home/sftpuser/.ssh
sudo chmod 600 /home/sftpuser/.ssh/authorized_keys
# Allow publickey auth and enable Subsystem sftp
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PubkeyAuthentication .*/PubkeyAuthentication yes/' /etc/ssh/sshd_config
if ! grep -q '^Subsystem sftp' /etc/ssh/sshd_config; then echo 'Subsystem sftp /usr/lib/openssh/sftp-server' | sudo tee -a /etc/ssh/sshd_config; fi
# Start sshd (listen on default 22 inside runner)
sudo /usr/sbin/sshd -D &
# Add host key to known_hosts so paramiko trusts it
ssh-keyscan -H localhost 127.0.0.1 | tee -a ~/.ssh/known_hosts
# Start ssh-agent and add our key so paramiko can use the agent
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519
# Persist ssh-agent environment for subsequent steps
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> $GITHUB_ENV
echo "SSH_AGENT_PID=$SSH_AGENT_PID" >> $GITHUB_ENV
# Provide SSH config so Paramiko can find the key even without agent
cat > ~/.ssh/config <<'EOF'
Host localhost
HostName localhost
IdentityFile ~/.ssh/id_ed25519
Host 127.0.0.1
HostName 127.0.0.1
IdentityFile ~/.ssh/id_ed25519
EOF
chmod 600 ~/.ssh/config
# Export SFTP test URL for tox via GITHUB_ENV
echo "BORGSTORE_TEST_SFTP_URL=sftp://sftpuser@localhost:22/borgstore/temp-store" >> $GITHUB_ENV
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
- name: Install Python requirements
run: |
python -m pip install --upgrade pip setuptools
pip install -r requirements.d/dev.txt
- name: Install borgstore (with sftp extra)
run: pip install -ve ".[sftp]"
- name: run tox env
run: tox --skip-missing-interpreters