Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
23b17ba
feat: Add shell completions, uninstall script, and CLI flags
gamesguru Jan 1, 2026
bcb5f36
fix(gpg): Handle ECDH checksum error with many keys
gamesguru Jan 1, 2026
0a9cb67
feat: Add Makefile, CI, and improved testing infrastructure
gamesguru Jan 1, 2026
5146891
linting, testing; coverage reported 63.8%
gamesguru Jan 3, 2026
e258c9e
URL resolution logic, clean/check, shell completions
gamesguru Jan 8, 2026
2d03bb0
todo wip
gamesguru Jan 11, 2026
e2bd653
fix two bugs with push/clean exiting cowardly
gamesguru Jan 13, 2026
3f9ff06
update/fix stuff. tidy.
gamesguru Jan 14, 2026
b2f3f8e
update gitignore
gamesguru Jan 14, 2026
4af2b59
update
gamesguru Jan 14, 2026
061a52a
logic/test fix
gamesguru Jan 14, 2026
96451a4
update completions
gamesguru Jan 14, 2026
e436a17
format
gamesguru Jan 14, 2026
2a04a04
lint
gamesguru Jan 14, 2026
9b85a00
lint/bug
gamesguru Jan 15, 2026
aa76b1b
more fixes
gamesguru Jan 15, 2026
4eae4d7
update test coverage
gamesguru Jan 15, 2026
fc5191a
update installer logic test
gamesguru Jan 15, 2026
0c69ddf
fixes to support installation on Termux (Android)
gamesguru Jan 16, 2026
cba9b9d
squash! fixes to support installation on Termux (Android)
gamesguru Jan 16, 2026
487e95b
lint fixes
gamesguru Jan 16, 2026
583a66a
fix kcov errors
gamesguru Jan 16, 2026
1979747
add command to list/stat remote; update completions
gamesguru Jan 17, 2026
0b74ee2
wip fix up stat command and clean
gamesguru Jan 17, 2026
6e53671
handle clean/init cases better
gamesguru Jan 17, 2026
5551a0a
more tweaks/spelling
gamesguru Jan 17, 2026
1c02bac
update clean tests/edge cases
gamesguru Jan 17, 2026
bf01c17
update tests
gamesguru Jan 17, 2026
7b6b07d
wip
gamesguru Jan 17, 2026
4497125
tidy completions
gamesguru Jan 17, 2026
e36c518
wip
gamesguru Jan 17, 2026
87627aa
repack on init option
gamesguru Jan 17, 2026
9484b87
Update tests & code. Add Android/Termux workflow
gamesguru Jan 17, 2026
881c523
wip
gamesguru Jan 17, 2026
2f0fc74
wip
gamesguru Jan 17, 2026
3fa791c
lint/fixes
gamesguru Jan 17, 2026
0abdfca
fixes/lint. tidy up. polish up.
gamesguru Jan 17, 2026
86ccf93
more fixes/lint/test tidying up.
gamesguru Jan 17, 2026
b535af6
fixes?
gamesguru Jan 17, 2026
52096f2
lint/fixes
gamesguru Jan 17, 2026
492906c
macOS fix
gamesguru Jan 17, 2026
29b9047
fixes
gamesguru Jan 17, 2026
9ec0b38
fix termux action
gamesguru Jan 17, 2026
8a3c807
lint & format commands
gamesguru Jan 17, 2026
9d40d9d
fix: termux action and format/generate targets
gamesguru Jan 17, 2026
1d9c21b
fix: use posix-specific syntax in docs generation
gamesguru Jan 17, 2026
db9b1fb
lint
gamesguru Jan 17, 2026
93ea385
add compatibility workflow; fix format
gamesguru Jan 17, 2026
8607240
separate/organized workflows; fix lints.
gamesguru Jan 17, 2026
c0c98bb
fix coverage, ln not copy!
gamesguru Jan 17, 2026
d3f5f79
fix: CI workflows, missing target name
gamesguru Jan 17, 2026
a9c6e7e
fix compatibility workflow and tests on older GPG
gamesguru Jan 17, 2026
9b5a0a3
fix
gamesguru Jan 17, 2026
3958fc4
get the compat runners further along
gamesguru Jan 17, 2026
e6546b8
fixed kcov
gamesguru Jan 17, 2026
30d6dc4
also should work, more robustly avoid kcov underreporting
gamesguru Jan 17, 2026
eea2046
fixes/debugs
gamesguru Jan 17, 2026
1201ad5
save kcov merge?
gamesguru Jan 17, 2026
f24031b
add make to compat container tests dependencies
gamesguru Jan 17, 2026
8612d1d
fix?
gamesguru Jan 17, 2026
bd1103c
fix?
gamesguru Jan 17, 2026
61d2c0d
more fixes to support container/root mount action
gamesguru Jan 17, 2026
6da1643
fixup! more fixes to support container/root mount action
gamesguru Jan 17, 2026
50d1b6e
fixup! more fixes to support container/root mount action
gamesguru Jan 17, 2026
f49256d
squash! more fixes to support container/root mount action
gamesguru Jan 17, 2026
e7b3271
fixup! more fixes to support container/root mount action
gamesguru Jan 17, 2026
70beb7a
lint/cubic
gamesguru Jan 17, 2026
68ab09c
fixup! lint/cubic
gamesguru Jan 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[[bash]]
# For extension-less files (i.e., git-remote-gcrypt)
indent_style=tab
indent_size=4

[*.sh]
# For bash scripts with .sh extension
indent_style=tab
indent_size=4

106 changes: 106 additions & 0 deletions .github/workflows/compatibility.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
---
name: compat

on:
pull_request:
schedule:
- cron: "0 0 * * 0" # Weekly on Sundays

jobs:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Validate 3 versions of git and GnuPG
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
git:
name: Git & GnuPG
runs-on: ubuntu-latest
container:
image: ${{ matrix.image }}
strategy:
fail-fast: false
matrix:
image: [ubuntu:20.04, ubuntu:22.04, ubuntu:24.04]

steps:
- uses: actions/checkout@v4

- name: Install dependencies (container is root)
run: |
apt-get update
apt-get install -y curl gnupg make git python3-docutils rsync

- name: Tool versions (check)
run: |
gpg --version
git --version

- name: Run Tests
run: make test

# Ubuntu 20.04
# gpg (GnuPG) 2.2.19
# libgcrypt 1.8.5
# Home: /github/home/.gnupg
# Supported algorithms:
# Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
# Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
# CAMELLIA128, CAMELLIA192, CAMELLIA256
# Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
# Compression: Uncompressed, ZIP, ZLIB, BZIP2
# git version 2.25.1

# Ubuntu 22.04
# gpg (GnuPG) 2.2.27
# libgcrypt 1.9.4
# Home: /github/home/.gnupg
# Supported algorithms:
# Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
# Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
# CAMELLIA128, CAMELLIA192, CAMELLIA256
# Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
# Compression: Uncompressed, ZIP, ZLIB, BZIP2
# git version 2.34.1

# Ubuntu 24.04
# gpg (GnuPG) 2.4.4
# libgcrypt 1.10.3
# Home: /github/home/.gnupg
# Supported algorithms:
# Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
# Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
# CAMELLIA128, CAMELLIA192, CAMELLIA256
# Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
# Compression: Uncompressed, ZIP, ZLIB, BZIP2
# git version 2.43.0

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Validate completions for bash, zsh, and fish
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
shell-bash-zsh-fish:
name: Shell Completion Syntax
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Install Shells
run: |
sudo apt-get update
sudo apt-get install -y zsh fish

- name: Tool versions (check)
run: |
bash --version
zsh --version
fish --version

- name: Generate Completions (if not up to date)
run: make generate

- name: Check Bash Syntax
run: bash -n completions/bash/git-remote-gcrypt

- name: Check Zsh Syntax
run: zsh -n completions/zsh/_git-remote-gcrypt

- name: Check Fish Syntax
run: fish --no-execute completions/fish/git-remote-gcrypt.fish
60 changes: 60 additions & 0 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
---
name: Coverage

"on":
push:
schedule:
- cron: "0 0 * * 0" # Sunday at 12 AM

jobs:
test-coverage:
runs-on: ubuntu-latest

steps:
- name: Checkout Code
uses: actions/checkout@v4

- name: Cache kcov
id: cache-kcov
uses: actions/cache@v4
with:
path: /usr/local/bin/kcov
key: ${{ runner.os }}-kcov-v1

# python3-docutils enables rst2man
- name: Install kcov Dependencies
run: |
sudo apt-get update
sudo apt-get install -y binutils-dev build-essential cmake git \
libssl-dev libcurl4-openssl-dev libelf-dev libdw-dev \
libiberty-dev zlib1g-dev libstdc++-12-dev \
python3-docutils

# Build & install kcov (on cache miss)
- name: Build and Install kcov
if: steps.cache-kcov.outputs.cache-hit != 'true'
run: |
git clone --branch v42 --depth 1 https://github.com/SimonKagstrom/kcov.git
cd kcov
mkdir build && cd build
cmake ..
make -j$(nproc)
sudo make install

- name: Check kcov installation
run: |
ls -l /usr/local/bin/kcov || echo "Kcov not found!"
kcov --version

- name: Test Installer [make test/installer]
run: make test/installer

- name: Test System [make test/system]
run: make test/system

- name: Upload to Codecov
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
# Path changed to match your Makefile's COV_ROOT (.coverage)
directory: ./.coverage
114 changes: 114 additions & 0 deletions .github/workflows/install.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
---
name: install

on:
push:
workflow_dispatch:
inputs:
debug:
description: "Enable debug logging (GCRYPT_DEBUG=1)"
required: false
type: boolean
default: false
schedule:
- cron: "0 0 * * 0" # Sunday at 12 AM

permissions:
contents: read

jobs:
# Handles Ubuntu and macOS
Unix:
runs-on: ${{ matrix.os }}

env:
GCRYPT_DEBUG: ${{ inputs.debug && '1' || '' }}

strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]

steps:
- uses: actions/checkout@v4

- name: Dependencies (Linux)
if: runner.os == 'Linux'
run: sudo apt-get update && sudo apt-get install -y git python3-docutils

- name: Dependencies (macOS)
if: runner.os == 'macOS'
run: brew install coreutils python3 git docutils

- name: Help [make]
run: make

- name: Test Installer
run: bash ./tests/installer-test-logic.sh

- name: Install [make install]
run: sudo make install

- name: Verify [make check/install]
run: make check/install

# Handles RedHat (UBI Container)
RedHat:
runs-on: ubuntu-latest

env:
GCRYPT_DEBUG: ${{ inputs.debug && '1' || '' }}

container:
image: registry.access.redhat.com/ubi9/ubi:latest

steps:
- uses: actions/checkout@v4

# dnf is slow in containers. We cache the dnf cache directory.
- name: Cache DNF
uses: actions/cache@v4
with:
path: /var/cache/dnf
key: ${{ runner.os }}-ubi9-dnf-v1
restore-keys: |
${{ runner.os }}-ubi9-dnf-

- name: Dependencies [redhat]
run: dnf install -y git python3-docutils make man-db

- name: Help [make]
run: make

- name: Test Installer
run: bash ./tests/installer-test-logic.sh

- name: Install [make install]
run: make install # container runs as sudo

- name: Verify [make check/install]
run: make check/install

# Handles Termux (Android shell)
termux-android:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Fix permissions for Docker
run: chmod -R 777 .

- name: Run tests in Termux
run: |
docker run --rm \
-v "$PWD":/app \
-w /app \
termux/termux-docker:latest \
/system/bin/sh -c "export PATH=/data/data/com.termux/files/usr/bin:\$PATH; \
apt-get update && \
apt-get install -y git make bash python man && \
pip install docutils && \
make install && \
make check/install && \
git-remote-gcrypt --version"
41 changes: 41 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: lint

"on":
push:
workflow_dispatch:
inputs:
debug:
description: "Enable debug logging (GCRYPT_DEBUG=1)"
required: false
type: boolean
default: false
schedule:
- cron: "0 0 * * 0" # Sunday at 12 AM

jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Install ShellCheck
run: sudo apt-get update && sudo apt-get install -y shellcheck

- name: Lint [make lint]
run: make lint

- name: Check Formatting [make format]
# Requires shfmt and black.
# Assuming environment has them or we install them.
# ubuntu-latest has python3, we need shfmt.
run: |
sudo snap install shfmt
pip3 install black
make format
git diff --exit-code

- name: Check Generation [make generate]
run: |
make generate
git diff --exit-code
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
/debian/files
/debian/git-remote-gcrypt.substvars
/debian/git-remote-gcrypt

# Test coverage
.coverage/
# scratch pad
.tmp/
Loading
Loading