Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -exo
|
|
|
|
|
|
|
|
pushd dist
|
|
|
|
|
|
|
|
# make sure we have a token set, api requests won't work otherwise
|
|
|
|
if [ -z "${GITHUB_TOKEN}" ]; then
|
|
|
|
echo "\${GITHUB_TOKEN} not set, publish failed"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2024-06-21 18:48:22 +00:00
|
|
|
if [[ "$GITHUB_REF" != refs/tags/* ]]; then
|
2024-05-16 11:31:08 +00:00
|
|
|
echo "$GITHUB_REF is not a tag, publish failed"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
REQUIRED=(
|
|
|
|
"jq"
|
|
|
|
"curl"
|
|
|
|
)
|
|
|
|
for REQUIRE in "${REQUIRED[@]}"
|
|
|
|
do
|
|
|
|
command -v "${REQUIRE}" >/dev/null 2>&1 || echo >&2 "'${REQUIRE}' must be installed"
|
|
|
|
done
|
|
|
|
|
2024-05-16 11:31:08 +00:00
|
|
|
GITHUB_TAG="${GITHUB_REF#refs/tags/}"
|
|
|
|
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
#see if the release already exists by tag
|
|
|
|
RELEASE_RESPONSE=`
|
|
|
|
curl \
|
|
|
|
--fail \
|
|
|
|
--header "Authorization: token ${GITHUB_TOKEN}" \
|
2024-05-16 11:31:08 +00:00
|
|
|
"https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${GITHUB_TAG}"
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
`
|
|
|
|
RELEASE_ID=`echo "${RELEASE_RESPONSE}" | jq '.id'`
|
|
|
|
|
|
|
|
if [ "${RELEASE_ID}" = "null" ]; then
|
|
|
|
echo "creating release"
|
|
|
|
|
|
|
|
COND_CREATE_DISCUSSION=""
|
|
|
|
PRERELEASE=true
|
2024-05-16 11:31:08 +00:00
|
|
|
if [[ ${GITHUB_TAG} =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
COND_CREATE_DISCUSSION="\"discussion_category_name\": \"announcement\","
|
|
|
|
PRERELEASE=false
|
|
|
|
fi
|
|
|
|
|
|
|
|
RELEASE_DATA="{
|
2024-05-16 11:31:08 +00:00
|
|
|
\"tag_name\": \"${GITHUB_TAG}\",
|
|
|
|
\"target_commitish\": \"${GITHUB_SHA}\",
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
${COND_CREATE_DISCUSSION}
|
2024-05-16 11:31:08 +00:00
|
|
|
\"name\": \"${GITHUB_TAG}\",
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
\"body\": \"\",
|
|
|
|
\"prerelease\": ${PRERELEASE}
|
|
|
|
}"
|
|
|
|
|
|
|
|
# create it if it doesn't exist yet
|
|
|
|
RELEASE_RESPONSE=`
|
|
|
|
curl \
|
|
|
|
--fail \
|
|
|
|
--request POST \
|
|
|
|
--header "Authorization: token ${GITHUB_TOKEN}" \
|
|
|
|
--header "Content-Type: application/json" \
|
|
|
|
--data "${RELEASE_DATA}" \
|
2024-05-16 11:31:08 +00:00
|
|
|
"https://api.github.com/repos/${GITHUB_REPOSITORY}/releases"
|
Use goreleaser to build universal darwin binaries
This is a small refactor of our workflow to test out goreleaser, a yaml
based tool for building, packaging, and releasing go binaries on
multiple platforms. It supports building binaries for to most of the platforms we
care about, including linux and macos, and also supports publishing
those binaries automatically as releases in Github, homebrew, snap, and
even apt / deb.
If this trial goes well, I think we should eventually replace the entire
release workflow with goreleaser. For now, this test is more tightly
scoped to only automated the MacOS release process, since that is the
one we have the most issues with. This PRi / commit:
- Builds darwin-amd64 and darwin-arm64 binaries of lotus, lotus-miner,
and lotus-worker
- Packages them into a universal darwin binary
- Publishes those to a release in Github based on the current tag
- Uses the binaries in the release to auto-publish and updated homebrew
configuration to filecoin-project/homebrew-lotus
- Does a `dry-run` build to produce a snapshot on release branches with
no tag
- Manually generate and upload checksums after goreleaser
2022-07-29 02:23:03 +00:00
|
|
|
`
|
|
|
|
else
|
|
|
|
echo "release already exists"
|
|
|
|
fi
|
|
|
|
|
|
|
|
RELEASE_UPLOAD_URL=`echo "${RELEASE_RESPONSE}" | jq -r '.upload_url' | cut -d'{' -f1`
|
|
|
|
echo "Preparing to send artifacts to ${RELEASE_UPLOAD_URL}"
|
|
|
|
|
|
|
|
for CHECKSUM_FILE in *.{cid,sha512}
|
|
|
|
do
|
|
|
|
echo "Uploading ${CHECKSUM_FILE}..."
|
|
|
|
curl \
|
|
|
|
--fail \
|
|
|
|
--request POST \
|
|
|
|
--header "Authorization: token ${GITHUB_TOKEN}" \
|
|
|
|
--header "Content-Type: application/octet-stream" \
|
|
|
|
--data-binary "@${CHECKSUM_FILE}" \
|
|
|
|
"$RELEASE_UPLOAD_URL?name=$(basename "${CHECKSUM_FILE}")"
|
|
|
|
|
|
|
|
echo "Uploaded ${CHECKSUM_FILE}"
|
|
|
|
done
|
|
|
|
|
|
|
|
popd
|