Add inline thumbs up/down feedback widget in app navigation (#2175) #1161
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Release | |
| on: | |
| push: | |
| branches: [main] | |
| permissions: | |
| contents: write | |
| packages: write | |
| pull-requests: write | |
| actions: read | |
| id-token: write | |
| jobs: | |
| check_changesets: | |
| name: Check Changesets | |
| runs-on: ubuntu-24.04 | |
| outputs: | |
| changeset_outputs_hasChangesets: | |
| ${{ steps.changesets.outputs.hasChangesets }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache-dependency-path: 'yarn.lock' | |
| cache: 'yarn' | |
| # Note: Do NOT set registry-url here — it creates a NODE_AUTH_TOKEN | |
| # that conflicts with npm OIDC trusted publishing | |
| - name: Configure npm registry | |
| run: npm config set registry https://registry.npmjs.org/ | |
| - name: Install root dependencies | |
| run: yarn install | |
| # Build @hyperdx/common-utils before changesets publish runs. | |
| # @hyperdx/cli's `prepublishOnly` runs `yarn build` (tsup), which bundles | |
| # imports from `@hyperdx/common-utils/dist/*`. Without this step those | |
| # paths fail to resolve and the npm publish for @hyperdx/cli is skipped | |
| # while the GitHub release/tag still succeeds. See HDX-4075. | |
| - name: Build common-utils | |
| run: make ci-build | |
| - name: Create Release Pull Request or Publish to npm | |
| if: always() | |
| continue-on-error: true | |
| id: changesets | |
| uses: changesets/action@v1 | |
| with: | |
| commit: 'chore(release): bump HyperDX app/package versions' | |
| title: 'Release HyperDX' | |
| version: yarn run version | |
| publish: yarn release | |
| env: | |
| YARN_ENABLE_IMMUTABLE_INSTALLS: false | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| NPM_CONFIG_PROVENANCE: true | |
| # --------------------------------------------------------------------------- | |
| # Check if version already published (skip-if-exists) | |
| # --------------------------------------------------------------------------- | |
| check_version: | |
| name: Check if version exists | |
| needs: check_changesets | |
| runs-on: ubuntu-24.04 | |
| if: | |
| needs.check_changesets.outputs.changeset_outputs_hasChangesets == 'false' | |
| outputs: | |
| should_release: ${{ steps.check.outputs.should_release }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Check if app image tag already exists | |
| id: check | |
| run: | | |
| TAG_EXISTS=$(docker manifest inspect ${{ env.IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }} > /dev/null 2>&1 && echo "true" || echo "false") | |
| if [ "$TAG_EXISTS" = "true" ]; then | |
| echo "Tag ${{ env.IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }} already exists. Skipping release." | |
| echo "should_release=false" >> $GITHUB_OUTPUT | |
| else | |
| echo "Tag does not exist. Proceeding with release." | |
| echo "should_release=true" >> $GITHUB_OUTPUT | |
| fi | |
| # --------------------------------------------------------------------------- | |
| # OTel Collector – build each arch natively, then merge into multi-arch tag | |
| # --------------------------------------------------------------------------- | |
| build-otel-collector: | |
| name: Build OTel Collector (${{ matrix.arch }}) | |
| needs: [check_changesets, check_version] | |
| if: needs.check_version.outputs.should_release == 'true' | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| platform: linux/amd64 | |
| runner: ubuntu-latest | |
| - arch: arm64 | |
| platform: linux/arm64 | |
| runner: ubuntu-latest-arm64 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Build and Push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| file: ./docker/otel-collector/Dockerfile | |
| platforms: ${{ matrix.platform }} | |
| target: prod | |
| tags: | | |
| ${{ env.OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| ${{ env.NEXT_OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| push: true | |
| cache-from: type=gha,scope=otel-collector-${{ matrix.arch }} | |
| cache-to: type=gha,mode=max,scope=otel-collector-${{ matrix.arch }} | |
| publish-otel-collector: | |
| name: Publish OTel Collector Manifest | |
| needs: [check_version, build-otel-collector] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Create multi-arch manifests | |
| run: | | |
| VERSION="${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}" | |
| MAJOR="${{ env.IMAGE_VERSION }}" | |
| LATEST="${{ env.IMAGE_LATEST_TAG }}" | |
| for IMAGE in "${{ env.OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB }}" "${{ env.NEXT_OTEL_COLLECTOR_IMAGE_NAME_DOCKERHUB }}"; do | |
| docker buildx imagetools create \ | |
| -t "${IMAGE}:${VERSION}" \ | |
| -t "${IMAGE}:${MAJOR}" \ | |
| -t "${IMAGE}:${LATEST}" \ | |
| "${IMAGE}:${VERSION}-amd64" \ | |
| "${IMAGE}:${VERSION}-arm64" | |
| done | |
| # --------------------------------------------------------------------------- | |
| # App (fullstack prod) – build each arch natively, then merge | |
| # --------------------------------------------------------------------------- | |
| build-app: | |
| name: Build App (${{ matrix.arch }}) | |
| needs: [check_changesets, check_version] | |
| if: needs.check_version.outputs.should_release == 'true' | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| platform: linux/amd64 | |
| runner: Large-Runner-x64-32 | |
| - arch: arm64 | |
| platform: linux/arm64 | |
| runner: Large-Runner-ARM64-32 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Build and Push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| file: ./docker/hyperdx/Dockerfile | |
| platforms: ${{ matrix.platform }} | |
| target: prod | |
| build-contexts: | | |
| hyperdx=./docker/hyperdx | |
| api=./packages/api | |
| app=./packages/app | |
| build-args: | | |
| CODE_VERSION=${{ env.CODE_VERSION }} | |
| tags: | | |
| ${{ env.IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| push: true | |
| sbom: true | |
| provenance: true | |
| cache-from: type=gha,scope=app-${{ matrix.arch }} | |
| cache-to: type=gha,mode=max,scope=app-${{ matrix.arch }} | |
| publish-app: | |
| name: Publish App Manifest | |
| needs: [check_version, build-app] | |
| runs-on: ubuntu-latest | |
| outputs: | |
| app_was_pushed: 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Create multi-arch manifest | |
| run: | | |
| VERSION="${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}" | |
| MAJOR="${{ env.IMAGE_VERSION }}" | |
| LATEST="${{ env.IMAGE_LATEST_TAG }}" | |
| IMAGE="${{ env.IMAGE_NAME_DOCKERHUB }}" | |
| docker buildx imagetools create \ | |
| -t "${IMAGE}:${VERSION}" \ | |
| -t "${IMAGE}:${MAJOR}" \ | |
| -t "${IMAGE}:${LATEST}" \ | |
| "${IMAGE}:${VERSION}-amd64" \ | |
| "${IMAGE}:${VERSION}-arm64" | |
| # --------------------------------------------------------------------------- | |
| # Local (all-in-one-noauth) – build each arch natively, then merge | |
| # --------------------------------------------------------------------------- | |
| build-local: | |
| name: Build Local (${{ matrix.arch }}) | |
| needs: [check_changesets, check_version] | |
| if: needs.check_version.outputs.should_release == 'true' | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| platform: linux/amd64 | |
| runner: Large-Runner-x64-32 | |
| - arch: arm64 | |
| platform: linux/arm64 | |
| runner: Large-Runner-ARM64-32 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Build and Push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| file: ./docker/hyperdx/Dockerfile | |
| platforms: ${{ matrix.platform }} | |
| target: all-in-one-noauth | |
| build-contexts: | | |
| clickhouse=./docker/clickhouse | |
| otel-collector=./docker/otel-collector | |
| hyperdx=./docker/hyperdx | |
| api=./packages/api | |
| app=./packages/app | |
| build-args: | | |
| CODE_VERSION=${{ env.CODE_VERSION }} | |
| tags: | | |
| ${{ env.LOCAL_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| ${{ env.NEXT_LOCAL_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| push: true | |
| sbom: true | |
| provenance: true | |
| cache-from: type=gha,scope=local-${{ matrix.arch }} | |
| cache-to: type=gha,mode=max,scope=local-${{ matrix.arch }} | |
| publish-local: | |
| name: Publish Local Manifest | |
| needs: [check_version, build-local] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Create multi-arch manifests | |
| run: | | |
| VERSION="${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}" | |
| MAJOR="${{ env.IMAGE_VERSION }}" | |
| LATEST="${{ env.IMAGE_LATEST_TAG }}" | |
| for IMAGE in "${{ env.LOCAL_IMAGE_NAME_DOCKERHUB }}" "${{ env.NEXT_LOCAL_IMAGE_NAME_DOCKERHUB }}"; do | |
| docker buildx imagetools create \ | |
| -t "${IMAGE}:${VERSION}" \ | |
| -t "${IMAGE}:${MAJOR}" \ | |
| -t "${IMAGE}:${LATEST}" \ | |
| "${IMAGE}:${VERSION}-amd64" \ | |
| "${IMAGE}:${VERSION}-arm64" | |
| done | |
| # --------------------------------------------------------------------------- | |
| # All-in-One (all-in-one-auth) – build each arch natively, then merge | |
| # --------------------------------------------------------------------------- | |
| build-all-in-one: | |
| name: Build All-in-One (${{ matrix.arch }}) | |
| needs: [check_changesets, check_version] | |
| if: needs.check_version.outputs.should_release == 'true' | |
| strategy: | |
| fail-fast: true | |
| matrix: | |
| include: | |
| - arch: amd64 | |
| platform: linux/amd64 | |
| runner: Large-Runner-x64-32 | |
| - arch: arm64 | |
| platform: linux/arm64 | |
| runner: Large-Runner-ARM64-32 | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Login to GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ghcr.io | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Build and Push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| file: ./docker/hyperdx/Dockerfile | |
| platforms: ${{ matrix.platform }} | |
| target: all-in-one-auth | |
| build-contexts: | | |
| clickhouse=./docker/clickhouse | |
| otel-collector=./docker/otel-collector | |
| hyperdx=./docker/hyperdx | |
| api=./packages/api | |
| app=./packages/app | |
| build-args: | | |
| CODE_VERSION=${{ env.CODE_VERSION }} | |
| tags: | | |
| ${{ env.ALL_IN_ONE_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| ${{ env.NEXT_ALL_IN_ONE_IMAGE_NAME_DOCKERHUB }}:${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}-${{ matrix.arch }} | |
| push: true | |
| sbom: true | |
| provenance: true | |
| cache-from: type=gha,scope=all-in-one-${{ matrix.arch }} | |
| cache-to: type=gha,mode=max,scope=all-in-one-${{ matrix.arch }} | |
| publish-all-in-one: | |
| name: Publish All-in-One Manifest | |
| needs: [check_version, build-all-in-one] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
| password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Create multi-arch manifests | |
| run: | | |
| VERSION="${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }}" | |
| MAJOR="${{ env.IMAGE_VERSION }}" | |
| LATEST="${{ env.IMAGE_LATEST_TAG }}" | |
| for IMAGE in "${{ env.ALL_IN_ONE_IMAGE_NAME_DOCKERHUB }}" "${{ env.NEXT_ALL_IN_ONE_IMAGE_NAME_DOCKERHUB }}"; do | |
| docker buildx imagetools create \ | |
| -t "${IMAGE}:${VERSION}" \ | |
| -t "${IMAGE}:${MAJOR}" \ | |
| -t "${IMAGE}:${LATEST}" \ | |
| "${IMAGE}:${VERSION}-amd64" \ | |
| "${IMAGE}:${VERSION}-arm64" | |
| done | |
| # --------------------------------------------------------------------------- | |
| # CLI – compile standalone binaries and upload as GitHub Release assets | |
| # npm publishing is handled by changesets in the check_changesets job above. | |
| # This job only compiles platform-specific binaries and creates a GH Release. | |
| # --------------------------------------------------------------------------- | |
| release-cli: | |
| name: Release CLI Binaries | |
| needs: [check_changesets, check_version] | |
| if: needs.check_version.outputs.should_release == 'true' | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version-file: '.nvmrc' | |
| cache-dependency-path: 'yarn.lock' | |
| cache: 'yarn' | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: '1.3.11' | |
| - name: Install dependencies | |
| run: yarn install | |
| - name: Build common-utils | |
| run: make ci-build | |
| - name: Get CLI version | |
| id: cli_version | |
| run: | | |
| CLI_VERSION=$(node -p "require('./packages/cli/package.json').version") | |
| echo "version=${CLI_VERSION}" >> $GITHUB_OUTPUT | |
| echo "CLI version: ${CLI_VERSION}" | |
| - name: Check if CLI release already exists | |
| id: check_cli_release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| if gh release view "cli-v${{ steps.cli_version.outputs.version }}" > /dev/null 2>&1; then | |
| echo "Release cli-v${{ steps.cli_version.outputs.version }} already exists. Skipping." | |
| echo "exists=true" >> $GITHUB_OUTPUT | |
| else | |
| echo "Release does not exist. Proceeding." | |
| echo "exists=false" >> $GITHUB_OUTPUT | |
| fi | |
| - name: Compile CLI binaries | |
| if: steps.check_cli_release.outputs.exists == 'false' | |
| working-directory: packages/cli | |
| run: | | |
| yarn compile:linux | |
| yarn compile:macos | |
| yarn compile:macos-x64 | |
| - name: Build release notes | |
| if: steps.check_cli_release.outputs.exists == 'false' | |
| run: | | |
| VERSION="${{ steps.cli_version.outputs.version }}" | |
| CHANGELOG="packages/cli/CHANGELOG.md" | |
| # Extract the section for this version from CHANGELOG.md | |
| # Grab everything between "## $VERSION" and the next "## " heading | |
| NOTES="" | |
| if [ -f "$CHANGELOG" ]; then | |
| NOTES=$(awk -v ver="## ${VERSION}" ' | |
| $0 == ver { found=1; next } | |
| found && /^## / { exit } | |
| found { print } | |
| ' "$CHANGELOG") | |
| fi | |
| # Write the combined release body | |
| { | |
| echo "## @hyperdx/cli v${VERSION}" | |
| echo "" | |
| if [ -n "$NOTES" ]; then | |
| echo "$NOTES" | |
| echo "" | |
| echo "---" | |
| echo "" | |
| fi | |
| cat <<'INSTALL' | |
| ### Installation | |
| **npm (recommended):** | |
| ```bash | |
| npm install -g @hyperdx/cli | |
| ``` | |
| **Or run directly with npx:** | |
| ```bash | |
| npx @hyperdx/cli tui -s <your-hyperdx-api-url> | |
| ``` | |
| **Manual download (standalone binary, no Node.js required):** | |
| ```bash | |
| # macOS Apple Silicon | |
| INSTALL | |
| echo "curl -L https://github.com/hyperdxio/hyperdx/releases/download/cli-v${VERSION}/hdx-darwin-arm64 -o hdx" | |
| echo "# macOS Intel" | |
| echo "curl -L https://github.com/hyperdxio/hyperdx/releases/download/cli-v${VERSION}/hdx-darwin-x64 -o hdx" | |
| echo "# Linux x64" | |
| echo "curl -L https://github.com/hyperdxio/hyperdx/releases/download/cli-v${VERSION}/hdx-linux-x64 -o hdx" | |
| cat <<'USAGE' | |
| chmod +x hdx && sudo mv hdx /usr/local/bin/ | |
| ``` | |
| ### Usage | |
| ```bash | |
| hdx auth login -s <your-hyperdx-api-url> | |
| hdx tui | |
| ``` | |
| USAGE | |
| } > /tmp/cli-release-notes.md | |
| echo "--- Generated release notes ---" | |
| cat /tmp/cli-release-notes.md | |
| - name: Create GitHub Release | |
| if: steps.check_cli_release.outputs.exists == 'false' | |
| uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 | |
| with: | |
| tag_name: cli-v${{ steps.cli_version.outputs.version }} | |
| name: '@hyperdx/cli v${{ steps.cli_version.outputs.version }}' | |
| body_path: /tmp/cli-release-notes.md | |
| draft: false | |
| prerelease: false | |
| files: | | |
| packages/cli/dist/hdx-linux-x64 | |
| packages/cli/dist/hdx-darwin-arm64 | |
| packages/cli/dist/hdx-darwin-x64 | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| # --------------------------------------------------------------------------- | |
| # Downstream notifications | |
| # --------------------------------------------------------------------------- | |
| notify_helm_charts: | |
| name: Notify Helm-Charts Downstream | |
| needs: | |
| [ | |
| check_changesets, | |
| publish-app, | |
| publish-otel-collector, | |
| publish-local, | |
| publish-all-in-one, | |
| ] | |
| runs-on: ubuntu-24.04 | |
| if: | | |
| needs.check_changesets.outputs.changeset_outputs_hasChangesets == 'false' && | |
| needs.publish-app.outputs.app_was_pushed == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Notify Helm-Charts Downstream | |
| uses: actions/github-script@v7 | |
| continue-on-error: true | |
| env: | |
| TAG: ${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }} | |
| with: | |
| github-token: ${{ secrets.CH_BOT_PAT }} | |
| script: | | |
| const { TAG } = process.env; | |
| const result = await github.rest.actions.createWorkflowDispatch({ | |
| owner: 'ClickHouse', | |
| repo: 'ClickStack-helm-charts', | |
| workflow_id: '${{ secrets.DOWNSTREAM_HC_WORKFLOW_ID }}', | |
| ref: 'main', | |
| inputs: { | |
| tag: TAG | |
| } | |
| }); | |
| notify_ch: | |
| name: Notify CH Downstream | |
| needs: | |
| [ | |
| check_changesets, | |
| publish-app, | |
| publish-otel-collector, | |
| publish-local, | |
| publish-all-in-one, | |
| ] | |
| runs-on: ubuntu-24.04 | |
| # Temporarily disabled: | |
| if: false | |
| # if: | | |
| # needs.check_changesets.outputs.changeset_outputs_hasChangesets == 'false' && | |
| # needs.publish-app.outputs.app_was_pushed == 'true' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Get Downstream App Installation Token | |
| id: auth | |
| uses: actions/create-github-app-token@v2 | |
| with: | |
| app-id: ${{ secrets.DOWNSTREAM_CH_APP_ID }} | |
| private-key: ${{ secrets.DOWNSTREAM_CH_APP_PRIVATE_KEY }} | |
| owner: ${{ secrets.DOWNSTREAM_CH_OWNER }} | |
| - name: Notify CH Downstream | |
| uses: actions/github-script@v7 | |
| continue-on-error: true | |
| env: | |
| TAG: ${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }} | |
| with: | |
| github-token: ${{ steps.auth.outputs.token }} | |
| script: | | |
| const { TAG } = process.env; | |
| const result = await github.rest.actions.createWorkflowDispatch({ | |
| owner: '${{ secrets.DOWNSTREAM_CH_OWNER }}', | |
| repo: '${{ secrets.DOWNSTREAM_DP_REPO }}', | |
| workflow_id: '${{ secrets.DOWNSTREAM_DP_WORKFLOW_ID }}', | |
| ref: 'main', | |
| inputs: { | |
| tag: TAG | |
| } | |
| }); | |
| notify_clickhouse_clickstack: | |
| needs: | |
| [ | |
| check_changesets, | |
| publish-app, | |
| publish-otel-collector, | |
| publish-local, | |
| publish-all-in-one, | |
| ] | |
| if: needs.publish-app.outputs.app_was_pushed == 'true' | |
| timeout-minutes: 5 | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Load Environment Variables from .env | |
| uses: xom9ikk/dotenv@v2 | |
| - name: Notify ClickHouse/clickhouse-clickstack Downstream | |
| uses: actions/github-script@v7 | |
| continue-on-error: true | |
| env: | |
| TAG: ${{ env.IMAGE_VERSION }}${{ env.IMAGE_VERSION_SUB_TAG }} | |
| with: | |
| github-token: ${{ secrets.CH_BOT_PAT }} | |
| script: | | |
| const { TAG } = process.env; | |
| const result = await github.rest.actions.createWorkflowDispatch({ | |
| owner: 'ClickHouse', | |
| repo: 'clickhouse-clickstack', | |
| workflow_id: 'sync-hyperdx.yml', | |
| ref: 'main', | |
| inputs: { | |
| tag: TAG, | |
| } | |
| }); | |
| otel-cicd-action: | |
| if: always() | |
| name: OpenTelemetry Export Trace | |
| runs-on: ubuntu-latest | |
| needs: | |
| [ | |
| check_changesets, | |
| publish-app, | |
| publish-otel-collector, | |
| publish-local, | |
| publish-all-in-one, | |
| release-cli, | |
| notify_helm_charts, | |
| notify_ch, | |
| notify_clickhouse_clickstack, | |
| ] | |
| steps: | |
| - name: Export workflow | |
| uses: corentinmusard/otel-cicd-action@v4 | |
| with: | |
| otlpEndpoint: ${{ secrets.OTLP_ENDPOINT }}/v1/traces | |
| otlpHeaders: ${{ secrets.OTLP_HEADERS }} | |
| otelServiceName: 'release-hyperdx-oss-workflow' | |
| githubToken: ${{ secrets.GITHUB_TOKEN }} |