diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c45e92202..5d5bd91b6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: BOTO_CONFIG: /dev/null GO111MODULE: "on" GOPROXY: "https://proxy.golang.org" - GOVER: '1.21' + GOVER: '1.19' steps: - name: Checkout repository @@ -99,7 +99,7 @@ jobs: - name: Ubuntu-20 image: "ubuntu:20.04" suite: focal - GOVER: '1.21' + GOVER: '1.19' install: "make ca-certificates git curl" - name: Ubuntu-22 image: "ubuntu:22.04" @@ -108,12 +108,12 @@ jobs: - name: Debian-10 image: "debian:buster" suite: buster - GOVER: '1.21' + GOVER: '1.19' install: "make ca-certificates git curl" - name: Debian-11 image: "debian:bullseye" suite: bullseye - GOVER: '1.21' + GOVER: '1.19' install: "make ca-certificates git curl" - name: Debian-12 image: "debian:bookworm" diff --git a/deb/reflist.go b/deb/reflist.go index 55588a998..df1b9b2e6 100644 --- a/deb/reflist.go +++ b/deb/reflist.go @@ -428,7 +428,10 @@ func bucketRefPrefix(ref []byte) []byte { ref = ref[len(libPrefix):] } - prefixLen := min(maxPrefixLen, len(ref)) + prefixLen := len(ref) + if maxPrefixLen < prefixLen { + prefixLen = maxPrefixLen + } prefix, _, _ := bytes.Cut(ref[:prefixLen], []byte{' '}) return prefix } @@ -715,9 +718,16 @@ func (set *RefListDigestSet) ForEach(handler func(digest []byte) error) error { return nil } +// workaround for: conversion of slices to arrays requires go1.20 or later +func newRefListArray(digest []byte) reflistDigestArray { + var array reflistDigestArray + copy(array[:], digest) + return array +} + // Add adds digest to set, doing nothing if the digest was already present func (set *RefListDigestSet) Add(digest []byte) { - set.items[reflistDigestArray(digest)] = struct{}{} + set.items[newRefListArray(digest)] = struct{}{} } // AddAllInRefList adds all the bucket digests in a SplitRefList to the set @@ -731,13 +741,13 @@ func (set *RefListDigestSet) AddAllInRefList(sl *SplitRefList) { // Has checks whether a digest is part of set func (set *RefListDigestSet) Has(digest []byte) bool { - _, ok := set.items[reflistDigestArray(digest)] + _, ok := set.items[newRefListArray(digest)] return ok } // Remove removes a digest from set func (set *RefListDigestSet) Remove(digest []byte) { - delete(set.items, reflistDigestArray(digest)) + delete(set.items, newRefListArray(digest)) } // RemoveAll removes all the digests in other from the current set @@ -776,10 +786,20 @@ func segmentPrefix(encodedDigest string) []byte { return []byte(fmt.Sprintf("F%s-", encodedDigest)) } +// workaround for go 1.19 instead of bytes.Clone +func cloneBytes(b []byte) []byte { + if b == nil { + return nil + } + cloned := make([]byte, len(b)) + copy(cloned, b) + return cloned +} + func segmentIndexKey(prefix []byte, idx int) []byte { // Assume most buckets won't have more than 0xFFFF = ~65k segments (which // would be an extremely large bucket!). - return append(bytes.Clone(prefix), []byte(fmt.Sprintf("%04x", idx))...) + return append(cloneBytes(prefix), []byte(fmt.Sprintf("%04x", idx))...) } // AllBucketDigests returns a set of all the bucket digests in the database @@ -861,7 +881,7 @@ func (collection *RefListCollection) loadBuckets(sl *SplitRefList) error { var bucket *PackageRefList if digest := sl.Buckets[idx]; len(digest) > 0 { - cacheKey := reflistDigestArray(digest) + cacheKey := newRefListArray(digest) bucket = collection.cache[cacheKey] if bucket == nil { bucket = NewPackageRefList() diff --git a/go.mod b/go.mod index 6bdb74b18..478582cb1 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/aptly-dev/aptly -go 1.21 +go 1.19 require ( github.com/AlekSi/pointer v1.2.0 diff --git a/system/Dockerfile b/system/Dockerfile index 3b39488e5..c22ea3155 100644 --- a/system/Dockerfile +++ b/system/Dockerfile @@ -2,9 +2,9 @@ FROM debian:bookworm-slim RUN apt-get update -y && apt-get install -y --no-install-recommends curl gnupg && apt-get clean && rm -rf /var/lib/apt/lists/* -RUN echo deb http://deb.debian.org/debian bookworm-backports main > /etc/apt/sources.list.d/backports.list +#RUN echo deb http://deb.debian.org/debian bookworm-backports main > /etc/apt/sources.list.d/backports.list RUN apt-get update && \ - apt-get install -y --no-install-recommends apg bzip2 xz-utils ca-certificates golang/bookworm-backports golang-go/bookworm-backports golang-doc/bookworm-backports golang-src/bookworm-backports make git python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto && \ + apt-get install -y --no-install-recommends apg bzip2 xz-utils ca-certificates golang golang-go golang-doc golang-src make git python3 python3-requests-unixsocket python3-termcolor python3-swiftclient python3-boto g++ && \ apt-get clean && rm -rf /var/lib/apt/lists/* RUN useradd -m --shell /bin/sh --home-dir /var/lib/aptly aptly