mirror of
https://github.com/kopia/kopia.git
synced 2026-10-22 22:24:49 -04:00
tools: added apt-publish tool that push to APT repository
The repository is in GCS and the script will automatically copy DEB files from dist/ to the proper locations and will regenerate APT package index.
This commit is contained in:
1 parent
6915e032b3
commit
b381d31eb8
4 files changed
+113
No files matched your search
@@ -20,3 +20,4 @@ known_hosts
|
||||
node_modules/
|
||||
*_bindata.go
|
||||
.tmp.*
|
||||
.boto
|
||||
@@ -3,6 +3,7 @@ GO_TEST=go test
|
||||
TEST_FLAGS?=
|
||||
KOPIA_INTEGRATION_EXE=$(CURDIR)/dist/integration/kopia.exe
|
||||
FIO_DOCKER_TAG=ljishen/fio
|
||||
BOTO_PATH=/Users/jarek/Projects/Kopia/tools/.boto
|
||||
|
||||
all: test lint vet integration-tests
|
||||
|
||||
@@ -107,6 +108,7 @@ travis-release:
|
||||
$(retry) $(MAKE) layering-test
|
||||
$(retry) $(MAKE) integration-tests
|
||||
ifeq ($(TRAVIS_OS_NAME),linux)
|
||||
$(MAKE) apt-publish
|
||||
$(MAKE) robustness-tool-tests
|
||||
$(MAKE) website
|
||||
$(MAKE) stress-test
|
||||
@@ -251,6 +253,7 @@ ifneq ($(TRAVIS_OS_NAME),windows)
|
||||
openssl aes-256-cbc -K "$(encrypted_fa1db4b894bb_key)" -iv "$(encrypted_fa1db4b894bb_iv)" -in tests/credentials/gcs/test_service_account.json.enc -out repo/blob/gcs/test_service_account.json -d
|
||||
openssl aes-256-cbc -K "$(encrypted_fa1db4b894bb_key)" -iv "$(encrypted_fa1db4b894bb_iv)" -in tests/credentials/sftp/id_kopia.enc -out repo/blob/sftp/id_kopia -d
|
||||
openssl aes-256-cbc -K "$(encrypted_fa1db4b894bb_key)" -iv "$(encrypted_fa1db4b894bb_iv)" -in tests/credentials/sftp/known_hosts.enc -out repo/blob/sftp/known_hosts -d
|
||||
openssl aes-256-cbc -K "$(encrypted_fa1db4b894bb_key)" -iv "$(encrypted_fa1db4b894bb_iv)" -in tools/boto.enc -out tools/.boto -d
|
||||
endif
|
||||
|
||||
travis-install-cloud-sdk: travis-install-test-credentials
|
||||
@@ -282,3 +285,11 @@ travis-create-long-term-repository:
|
||||
echo Not creating long-term repository.
|
||||
|
||||
endif
|
||||
|
||||
ifeq ($(TRAVIS_PULL_REQUEST),false)
|
||||
apt-publish:
|
||||
$(CURDIR)/tools/apt-publish.sh $(CURDIR)/dist
|
||||
else
|
||||
apt-publish:
|
||||
@echo Not pushing to APT repository on pull request builds.
|
||||
endif
|
||||
Executable
+99
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
GS_PREFIX=gs://packages.kopia.io/apt
|
||||
GPG_KEY_ID=A3B5843ED70529C23162E3687713E6D88ED70D9D
|
||||
PKGDIR=$1
|
||||
|
||||
if [ -z "$PKGDIR" ]; then
|
||||
echo usage $0: /path/to/dist
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "$PKGDIR" ]; then
|
||||
echo $PKGDIR must be a directory containing '*.deb' files
|
||||
exit 1
|
||||
fi
|
||||
|
||||
distributions="stable testing unstable"
|
||||
architectures="amd64 arm64 armhf"
|
||||
|
||||
WORK_DIR=/tmp/apt-publish
|
||||
rm -rf "$WORK_DIR"
|
||||
mkdir -p "$WORK_DIR"
|
||||
|
||||
echo Downloading Package lists...
|
||||
|
||||
deb_files=$(find $1 -name '*.deb')
|
||||
|
||||
# download 'Packages' files from GCS for all supported distributions and architectures
|
||||
for d in $distributions; do
|
||||
for a in $architectures; do
|
||||
mkdir -pv $WORK_DIR/dists/$d/main/binary-$a
|
||||
touch $WORK_DIR/dists/$d/main/binary-$a/Packages
|
||||
gsutil cp -av $GS_PREFIX/dists/$d/main/binary-$a/Packages $WORK_DIR/dists/$d/main/binary-$a/Packages
|
||||
done
|
||||
done
|
||||
|
||||
# sort all files into appropriate binary directories
|
||||
for f in $deb_files; do
|
||||
if [[ "$f" =~ _([^_]*)_(linux_)?([^_]+).deb$ ]]; then
|
||||
ver=${BASH_REMATCH[1]#v}
|
||||
arch=${BASH_REMATCH[3]}
|
||||
dists=""
|
||||
|
||||
if [[ $ver =~ "next" ]]; then
|
||||
# ignore -next versions which are from goreleaser snapshots
|
||||
continue
|
||||
fi
|
||||
|
||||
# x.y.z
|
||||
if [[ $ver =~ [0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
dists="stable testing"
|
||||
fi
|
||||
|
||||
# x.y.z-prerelease
|
||||
if [[ $ver =~ [0-9]+\.[0-9]+\.[0-9]+\-.*$ ]]; then
|
||||
dists="testing"
|
||||
fi
|
||||
|
||||
# 20x.y.z-hash
|
||||
if [[ $ver =~ 20[0-9]+\.[0-9]+\.[0-9]+-.*$ ]]; then
|
||||
dists="unstable"
|
||||
fi
|
||||
|
||||
echo "$f $arch $dists"
|
||||
|
||||
bn=$(basename $f)
|
||||
for d in $dists; do
|
||||
packages_dir=$WORK_DIR/dists/$d/main/binary-$arch
|
||||
if grep $bn\$ $packages_dir/Packages > /dev/null; then
|
||||
echo $bn already in $packages_dir/Packages
|
||||
else
|
||||
cp -av $f $packages_dir
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# append to 'Packages' file for all files placed in the work directory
|
||||
for d in $distributions; do
|
||||
for a in $architectures; do
|
||||
mkdir -pv $WORK_DIR/dists/$d/main/binary-$a
|
||||
(cd $WORK_DIR && dpkg-scanpackages --multiversion -a $a dists/$d/main/binary-$a >> dists/$d/main/binary-$a/Packages)
|
||||
gzip -k $WORK_DIR/dists/$d/main/binary-$a/Packages
|
||||
done
|
||||
done
|
||||
|
||||
# generate Release/InRelease/Release.gpg files for all distributions
|
||||
for d in $distributions; do
|
||||
docker run -it --rm -v $WORK_DIR/dists/$d:/root marshallofsound/apt-ftparchive release \
|
||||
-o APT::FTPArchive::Release::Architectures="$architectures" \
|
||||
-o APT::FTPArchive::Release::Codename="$d" \
|
||||
-o APT::FTPArchive::Release::Suite="$d" \
|
||||
. > $WORK_DIR/dists/$d/Release
|
||||
|
||||
gpg --default-key $GPG_KEY_ID -abs -o - $WORK_DIR/dists/$d/Release > $WORK_DIR/dists/$d/Release.gpg
|
||||
gpg --default-key $GPG_KEY_ID --clearsign -o - $WORK_DIR/dists/$d/Release > $WORK_DIR/dists/$d/InRelease
|
||||
done
|
||||
|
||||
# sync back to GCS
|
||||
gsutil -m rsync -r $WORK_DIR/ $GS_PREFIX/
|
||||
@@ -0,0 +1,2 @@
|
||||
·Z0�₪I?¯$L«�="_ר�L�wף\ְײ/
|
||||
½ֱ·T¯־†ֲ��C[װ€�?¸פ״�²ֲ˜sL·–1£ׂh�¹�₪aIƒ�ָ}’9n~w¦%כ�¼Uו+ nף•]�ֵנֳ‡�כ_ע¿ו]₪¬׀לאC0L—kcֵ£ װdfwa–GPה%‘ֶM”ֹFׁ�_„2”!;�#�
|
||||
Reference in new issue
Block a user