diff --git a/.github/workflows/update.yml b/.github/workflows/update.yml new file mode 100644 index 0000000..cacf31b --- /dev/null +++ b/.github/workflows/update.yml @@ -0,0 +1,108 @@ +name: Update + +on: + schedule: + - cron: '0 14 * * 1' + workflow_dispatch: + +jobs: + update: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Install xmllint + run: | + sudo apt-get update + sudo apt-get install libxml2-utils + - name: Update nbdkit bindings from libguestfs.org releases + run: | + #!/usr/bin/env bash + RELEASES=$(curl --silent https://download.libguestfs.org/nbdkit/ | xmllint --html --noblanks --xpath "/html/body/table/tr[td/img/@alt = '[DIR]']/td[a/.]/a/text()" -) + git config --global user.email "marnold@redhat.com" + git config --global user.name "Matthew Arnold" + git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} + git pull --all --set-upstream + for release in ${RELEASES} + do + release=${release%?} + TARBALLS=$(curl --silent https://download.libguestfs.org/nbdkit/$release/ | xmllint --html --noblanks --xpath "/html/body/table/tr/td[contains(a/@href, '.tar.gz') and not(contains(a/@href, '.tar.gz.sig'))]/a/@href" -) || true + for tarball in ${TARBALLS} + do + IFS=\"$IFS read href tarball suffix <<< $tarball # Intentionally overwrite tarball + IFS="-.$IFS" read nbdkit major minor build suffix <<< $tarball + if (($major \* 100000000 + $minor \* 10000 + $build \< 100190009)) + then # Go bindings added in 1.19.9 + echo Ignoring release older than 1.19.9: $release/$tarball + echo + continue + fi + latestrelease=$release + version=$major.$minor.$build + tag=v$major.$minor.$build + echo Branch: $release Tar: $tarball Tag: $tag + if git rev-parse --verify $tag + then + echo Already present in repository: $tag + else + if ! (git rev-parse --verify $release || git rev-parse --verify origin/$release) + then + echo Creating new branch: $release + root=$(git rev-list --max-parents=0 HEAD) + git checkout $root + git checkout -b $release + else + echo Checking out existing branch: $release + git checkout $release + fi + echo Updating $release branch with new version $version + curl --silent https://download.libguestfs.org/nbdkit/$release/$tarball | tar -xzv --strip-components=6 nbdkit-$version/plugins/golang/src/libguestfs.org/nbdkit/ + rm -f .gitignore + git add --all + git diff-index --quiet HEAD || git commit -m "Import nbdkit-$version" + git tag $tag + fi + if git rev-parse --verify $tag-cdi + then + echo Already present in repository: $tag-cdi + else + if ! (git rev-parse --verify $release-cdi || git rev-parse --verify origin/$release-cdi) + then + echo Creating new branch: $release-cdi + root=$(git rev-list --max-parents=0 HEAD) + git checkout $root + git checkout -b $release-cdi + else + echo Checking out existing branch: $release-cdi + git checkout $release-cdi + fi + git checkout $tag ./ + find . -type f -name '*.go' -exec sed -i 's/#cgo pkg-config: nbdkit/#cgo LDFLAGS: -lnbdkit/g' {} + + git add --all + git diff-index --quiet HEAD || git commit -m "Tweak nbdkit-$version for CDI build" + git tag $tag-cdi + fi + echo + echo + done + done + + latest=$(tail -n 1 <<< $latestrelease) + git checkout main + if git rev-parse --verify $latestrelease + then + echo Copy newest bindings from local $latest + git checkout $latest ./ + elif git rev-parse --verify origin/$latestrelease + then + echo Copy newest bindings from remote $latest + git checkout origin/$latest ./ + else + echo Latest branch not present in local or remote? Check libguestfs.org for unpopulated directory. + fi + git diff-index --quiet HEAD || git commit -m "Update latest nbdkit bindings." + git push --all -u + git push --tags diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..2582495 --- /dev/null +++ b/LICENSE @@ -0,0 +1,30 @@ +nbdkit +Copyright (C) 2013-2020 Red Hat Inc. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are +met: + +* Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright +notice, this list of conditions and the following disclaimer in the +documentation and/or other materials provided with the distribution. + +* Neither the name of Red Hat nor the names of its contributors may be +used to endorse or promote products derived from this software without +specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY RED HAT AND CONTRIBUTORS ''AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL RED HAT OR +CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF +USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT +OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c00af6 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# go-nbdkit +Importable Golang bindings for nbdkit, extracted from official libguestfs.org releases. + +This repository includes all the auto-generated golang files from the official libguestfs.org releases of nbdkit, so that the bindings can be imported with `go.mod` or `go get`. This is intended as a temporary measure to allow [CDI](https://github.com/kubevirt/containerized-data-importer) to make use of nbdkit plugins for functional tests. + +Requires a minimum of nbdkit version 1.20. diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..dafa432 --- /dev/null +++ b/go.mod @@ -0,0 +1,4 @@ +module git.batts.cloud/vbatts/go-nbdkit + +// First version of golang with working module support. +go 1.13 diff --git a/nbdkit.go b/nbdkit.go index f8fac4f..79344be 100644 --- a/nbdkit.go +++ b/nbdkit.go @@ -33,7 +33,7 @@ package nbdkit /* -#cgo LDFLAGS: -lnbdkit +#cgo pkg-config: nbdkit #cgo LDFLAGS: -Wl,--unresolved-symbols=ignore-in-object-files #include diff --git a/utils.go b/utils.go index 0fb6922..d9c0c18 100644 --- a/utils.go +++ b/utils.go @@ -33,7 +33,7 @@ package nbdkit /* -#cgo LDFLAGS: -lnbdkit +#cgo pkg-config: nbdkit #define NBDKIT_API_VERSION 2 #include diff --git a/wrappers.go b/wrappers.go index d7bd58d..604500c 100644 --- a/wrappers.go +++ b/wrappers.go @@ -33,7 +33,7 @@ package nbdkit /* -#cgo LDFLAGS: -lnbdkit +#cgo pkg-config: nbdkit #include #include