diff --git a/.github/workflows/make.yml b/.github/workflows/make.yml index ac9833c8c..85ca6aff1 100644 --- a/.github/workflows/make.yml +++ b/.github/workflows/make.yml @@ -190,4 +190,5 @@ jobs: GITHUB_TOKEN: ${{secrets.GH_TOKEN}} - name: Publish Other Packages run: make publish-packages - + env: + GITHUB_TOKEN: ${{secrets.GH_TOKEN}} diff --git a/Makefile b/Makefile index 26d758987..57ecd8274 100644 --- a/Makefile +++ b/Makefile @@ -351,6 +351,7 @@ publish-packages: ifeq ($(REPO_OWNER)/$(GOOS)/$(GOARCH)/$(IS_PULL_REQUEST),kopia/linux/amd64/false) $(CURDIR)/tools/apt-publish.sh $(CURDIR)/dist $(CURDIR)/tools/rpm-publish.sh $(CURDIR)/dist + $(CURDIR)/tools/homebrew-publish.sh $(CURDIR)/dist $(KOPIA_VERSION_NO_PREFIX) @echo $(DOCKERHUB_TOKEN) | docker login --username $(DOCKERHUB_USERNAME) --password-stdin $(CURDIR)/tools/docker-publish.sh $(CURDIR)/dist_binaries else diff --git a/tools/homebrew-publish.sh b/tools/homebrew-publish.sh new file mode 100755 index 000000000..8e2e457d7 --- /dev/null +++ b/tools/homebrew-publish.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -e +dist_dir=$1 +ver=$2 + +if [ "$CI_TAG" == "" ]; then + echo Not publishing Homebrew package on non-tagged releases. + exit 0 +fi + +if [ "$GITHUB_TOKEN" == "" ]; then + echo Not publishing Homebrew package because GITHUB_TOKEN is not set. + exit 0 +fi + +if [ "$REPO_OWNER/$GITHUB_REF" != "kopia/refs/heads/master" ]; then + echo Not publishing Homebrew package on $REPO_OWNER/$GITHUB_REF + exit 0 +fi + +echo Publishing Homebrew version $ver from $dist_dir... + +HASH_MAC_AMD64=$(sha256sum $dist_dir/kopia-$ver-macOS-x64.tar.gz | cut -f 1 -d " ") +HASH_MAC_ARM64=$(sha256sum $dist_dir/kopia-$ver-macOS-arm64.tar.gz | cut -f 1 -d " ") +HASH_LINUX_AMD64=$(sha256sum $dist_dir/kopia-$ver-linux-x64.tar.gz | cut -f 1 -d " ") +HASH_LINUX_ARM64=$(sha256sum $dist_dir/kopia-$ver-linux-arm64.tar.gz | cut -f 1 -d " ") +HASH_LINUX_ARM=$(sha256sum $dist_dir/kopia-$ver-linux-arm.tar.gz | cut -f 1 -d " ") +tmpdir=$(mktemp -d) +git clone https://$GITHUB_TOKEN@github.com/kopia/homebrew-kopia.git $tmpdir + +cat tools/kopia-homebrew.rs.template | \ + sed "s/VERSION/$ver/g" | \ + sed "s/HASH_MAC_AMD64/$HASH_MAC_AMD64/g" | \ + sed "s/HASH_MAC_ARM64/$HASH_MAC_ARM64/g" | \ + sed "s/HASH_LINUX_AMD64/$HASH_LINUX_AMD64/g" | \ + sed "s/HASH_LINUX_ARM64/$HASH_LINUX_ARM64/g" | + sed "s/HASH_LINUX_ARM/$HASH_LINUX_ARM/g" > $tmpdir/kopia.rb + +(cd $tmpdir && git add kopia.rb && git -c "user.name=Kopia Builder" -c "user.email=builder@kopia.io" commit -m "Brew formula update for kopia version $ver" && git push) +rm -rf "$tmpdir" diff --git a/tools/kopia-homebrew.rs.template b/tools/kopia-homebrew.rs.template new file mode 100644 index 000000000..805a42497 --- /dev/null +++ b/tools/kopia-homebrew.rs.template @@ -0,0 +1,34 @@ +# typed: false +# frozen_string_literal: true + +class Kopia < Formula + desc "Fast and secure open source backup." + homepage "https://kopia.io" + version "VERSION" + bottle :unneeded + + if OS.mac? && Hardware::CPU.intel? + url "https://github.com/kopia/kopia/releases/download/vVERSION/kopia-VERSION-macOS-x64.tar.gz" + sha256 "HASH_MAC_AMD64" + end + if OS.mac? && Hardware::CPU.arm? + url "https://github.com/kopia/kopia/releases/download/vVERSION/kopia-VERSION-macOS-arm64.tar.gz" + sha256 "HASH_MAC_ARM64" + end + if OS.linux? && Hardware::CPU.intel? + url "https://github.com/kopia/kopia/releases/download/vVERSION/kopia-VERSION-linux-x64.tar.gz" + sha256 "HASH_LINUX_AMD64" + end + if OS.linux? && Hardware::CPU.arm? && !Hardware::CPU.is_64_bit? + url "https://github.com/kopia/kopia/releases/download/vVERSION/kopia-VERSION-linux-arm.tar.gz" + sha256 "HASH_LINUX_ARM" + end + if OS.linux? && Hardware::CPU.arm? && Hardware::CPU.is_64_bit? + url "https://github.com/kopia/kopia/releases/download/vVERSION/kopia-VERSION-linux-arm64.tar.gz" + sha256 "HASH_LINUX_ARM64" + end + + def install + bin.install "kopia" + end +end