Skip to content

link issue (#894) #109

link issue (#894)

link issue (#894) #109

Workflow file for this run

name: Pre-Release
on:
push:
tags:
- 'v*.*.*'
env:
ZITI_DEB_TEST_REPO: ${{ vars.ZITI_DEB_TEST_REPO || 'zitipax-openziti-deb-test' }}
ZITI_RPM_TEST_REPO: ${{ vars.ZITI_RPM_TEST_REPO || 'zitipax-openziti-rpm-test' }}
JFROG_CLI_VERSION: ${{ vars.JFROG_CLI_VERSION || '2.50.4' }}
jobs:
build-linux:
name: build-linux-${{ matrix.arch.goreleaser }}
needs:
- build-darwin
- build-windows
runs-on: ubuntu-22.04 # oldest Docker host runner for broadest kernel, syscall, ABI support
container: openziti/ziti-builder:v2 # v2 is based on ubuntu focal 20.04 for broadest glibc support
strategy:
matrix:
arch:
- goreleaser: amd64
deb: amd64
rpm: x86_64
gcc: gcc g++
- goreleaser: arm64
deb: arm64
rpm: aarch64
gcc: gcc-aarch64-linux-gnu
- goreleaser: armhf
deb: armhf
rpm: armv7hl
gcc: gcc-arm-linux-gnueabihf
steps:
# skipped because ziti-builder image provides the multi-arch, multi-lib build toolchain
# - run: apt-get update
# - run: apt-get --yes --quiet install ${{ matrix.arch.gcc }}
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: git fetch --force --tags
- uses: actions/setup-go@v5
with:
go-version-file: ./go.mod
cache: true
- uses: actions/setup-node@v4
with:
node-version: 20.x
- run: npm install
working-directory: ui
- run: npm run build
working-directory: ui
env:
CI: "true"
- run: npm install
working-directory: agent/agentUi
- run: npm run build
working-directory: agent/agentUi
env:
CI: "true"
- uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: '~> v2'
args: release --skip=publish --config .goreleaser-linux-${{ matrix.arch.goreleaser }}.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v4
with:
name: release-builds-linux-${{ matrix.arch.goreleaser }}
path: ./dist/*.gz
- name: Configure jFrog CLI
uses: jfrog/setup-jfrog-cli@v4
with:
version: ${{ env.JFROG_CLI_VERSION }}
env:
JF_ENV_1: ${{ secrets.ZITI_ARTIFACTORY_CLI_CONFIG_PACKAGE_UPLOAD }}
- name: Upload RPM to Artifactory pre-release repo
shell: bash
env:
ARCH: ${{ matrix.arch.rpm }}
run: |
set -o xtrace
shopt -s nullglob
SEMVER=${GITHUB_REF_NAME#v}
SEMVER_CORE=${SEMVER%%-*}
if [[ "$SEMVER_CORE" == ${SEMVER#*-} ]]; then
SEMVER_PRE="" # no semver pre-release suffix
else
SEMVER_PRE=${SEMVER#*-}
fi
for PAX in zrok{,-share}; do
_pattern="./dist/${PAX}-${SEMVER_CORE}${SEMVER_PRE:+~${SEMVER_PRE}}*.${ARCH}.rpm"
if ! compgen -G "$_pattern" > /dev/null; then
echo "ERROR: No RPM files found matching pattern '${_pattern}'" >&2
ls -1 ./dist/
exit 1
fi
_rpms=( $_pattern )
if [[ ${#_rpms[@]} -ne 1 ]]; then
echo "ERROR: Failed to find exactly one RPM file, got: '${_rpms[@]}'" >&2
exit 1
fi
echo "INFO: Uploading ${_rpms[0]}"
jf rt upload \
--recursive=false \
--flat=true \
--fail-no-op=true \
"${_rpms[0]}" \
${{ env.ZITI_RPM_TEST_REPO }}/redhat/${ARCH}/
done
- name: Upload DEB to Artifactory pre-release repo
shell: bash
env:
ARCH: ${{ matrix.arch.deb }}
run: |
set -o xtrace
shopt -s nullglob
SEMVER=${GITHUB_REF_NAME#v}
SEMVER_CORE=${SEMVER%%-*}
if [[ "$SEMVER_CORE" == ${SEMVER#*-} ]]; then
SEMVER_PRE="" # no semver pre-release suffix
else
SEMVER_PRE=${SEMVER#*-}
fi
for PAX in zrok{,-share}; do
_pattern="./dist/${PAX}_${SEMVER_CORE}${SEMVER_PRE:+~${SEMVER_PRE}}*_${ARCH}.deb"
if ! compgen -G "$_pattern" > /dev/null; then
echo "ERROR: No DEB files found matching pattern '${_pattern}'" >&2
ls -1 ./dist/
exit 1
fi
_debs=( $_pattern )
if [[ ${#_debs[@]} -ne 1 ]]; then
echo "ERROR: Failed to match exactly one DEB file, got: '${_debs[@]}'" >&2
exit 1
fi
echo "INFO: Uploading ${_debs[0]}"
jf rt upload \
--recursive=false \
--flat=true \
--fail-no-op=true \
--deb=debian/main/${ARCH} \
"${_debs[0]}" \
${{ env.ZITI_DEB_TEST_REPO }}/pool/${PAX}/${ARCH}/
done
build-darwin:
if: github.repository_owner == 'openziti' || vars.ZROK_SKIP_MACOS_BUILD == 'false'
runs-on: macos-14
steps:
- name: import distribution cert
uses: apple-actions/import-codesign-certs@v3
with:
p12-file-base64: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_P12_BASE64 }}
p12-password: ${{ secrets.APPLE_DEVELOPER_CERTIFICATE_PASSWORD }}
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: git fetch --force --tags
- uses: actions/setup-go@v5
with:
go-version-file: ./go.mod
cache: true
- uses: actions/setup-node@v4
with:
node-version: 20.x
- run: npm install
working-directory: ui
- run: npm run build
working-directory: ui
env:
CI: "true"
- run: npm install
working-directory: agent/agentUi
- run: npm run build
working-directory: agent/agentUi
env:
CI: "true"
- uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: '~> v2'
args: release --skip=publish --config .goreleaser-darwin.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
AC_USERNAME: ${{ secrets.AC_USERNAME }}
AC_PASSWORD: ${{ secrets.AC_PASSWORD }}
- uses: actions/upload-artifact@v4
with:
name: release-builds-darwin
path: ./dist/*.gz
build-windows:
if: github.repository_owner == 'openziti' || vars.ZROK_SKIP_WINDOWS_BUILD == 'false'
runs-on: ubuntu-latest
steps:
- run: sudo apt update
- run: sudo apt-get install gcc-mingw-w64-x86-64
- uses: actions/checkout@v4
with:
fetch-depth: 0
- run: git fetch --force --tags
- uses: actions/setup-go@v5
with:
go-version-file: ./go.mod
cache: true
- uses: actions/setup-node@v4
with:
node-version: 20.x
- run: npm install
working-directory: ui
- run: npm run build
working-directory: ui
env:
CI: "true"
- run: npm install
working-directory: agent/agentUi
- run: npm run build
working-directory: agent/agentUi
env:
CI: "true"
- uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: '~> v2'
args: release --skip=publish --config .goreleaser-windows.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- uses: actions/upload-artifact@v4
with:
name: release-builds-windows
path: ./dist/*.gz
call-publish-docker-images:
name: Publish Release Docker Images
needs:
- build-linux
- build-darwin
- build-windows
uses: ./.github/workflows/publish-docker-images.yml
secrets: inherit
with:
zrok-version: ${{ github.ref_name }}
draft-release:
runs-on: ubuntu-latest
needs: call-publish-docker-images
permissions:
contents: write # need write to draft the release
id-token: write # need write to get OIDC token for generating attestations
attestations: write # need write to create attestations
steps:
- uses: actions/checkout@v4
- run: |
mkdir -p ./automated-release-build
- name: Fetch Source Archive
shell: bash
run: |
curl -sSLf -o ./automated-release-build/source-${{ github.ref_name }}.tar.gz \
https://api.github.com/repos/${{ github.repository }}/tarball/${{ github.ref_name }}
- name: Build SBOM from Dependency Graph as SPDX JSON
shell: bash
env:
GH_TOKEN: ${{ github.token }}
run: |
gh api \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/dependency-graph/sbom \
| tee ./automated-release-build/sbom-${{ github.ref_name }}.spdx.json
- uses: actions/download-artifact@v4
with:
path: ./automated-release-build
merge-multiple: true
pattern: release-builds-*
- name: Create Checksum Files
shell: bash
run: |
ls -lAR ./automated-release-build/
# create checksum file for the attestations
shasum --algorithm 256 ./automated-release-build/* | tee /tmp/attestation-subjects.sha256.txt
# create checksum file for the release
cd ./automated-release-build/
shasum --algorithm 256 ./* | tee ./checksums.sha256.txt
- name: Attest Build Provenance
uses: actions/attest-build-provenance@v2
with:
subject-checksums: /tmp/attestation-subjects.sha256.txt
- name: Draft Release
uses: goreleaser/goreleaser-action@v6
with:
distribution: goreleaser
version: '~> v2'
args: release --config .goreleaser-release.yml
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}