Skip to content

Commit

Permalink
Clean-up after CI testing
Browse files Browse the repository at this point in the history
  • Loading branch information
mszostok committed Feb 7, 2024
1 parent df16e04 commit f42f3c5
Show file tree
Hide file tree
Showing 6 changed files with 162 additions and 197 deletions.
24 changes: 12 additions & 12 deletions .github/actions/cloud-slack-e2e/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -109,15 +109,15 @@ runs:
if: ${{ failure() }}
uses: ./.github/actions/dump-cluster

# - name: Slack Notification
# uses: rtCamp/action-slack-notify@v2
# if: ${{ failure() }}
# env:
# SLACK_USERNAME: Botkube Cloud CI
# SLACK_COLOR: 'red'
# SLACK_TITLE: 'Message'
# SLACK_CHANNEL: 'botkube-cloud-ci-alerts'
# SLACK_MESSAGE: "Cloud Slack ${{ inputs.e2e_type }} E2E tests failed :scream:"
# SLACK_ICON_EMOJI: ':this-is-fine-fire:'
# SLACK_FOOTER: "Fingers crossed it's just an outdated/flaky test..."
# SLACK_WEBHOOK: ${{ inputs.slack_alerts_webhook }}
- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
if: ${{ failure() }}
env:
SLACK_USERNAME: Botkube Cloud CI
SLACK_COLOR: 'red'
SLACK_TITLE: 'Message'
SLACK_CHANNEL: 'botkube-cloud-ci-alerts'
SLACK_MESSAGE: "Cloud Slack ${{ inputs.e2e_type }} E2E tests failed :scream:"
SLACK_ICON_EMOJI: ':this-is-fine-fire:'
SLACK_FOOTER: "Fingers crossed it's just an outdated/flaky test..."
SLACK_WEBHOOK: ${{ inputs.slack_alerts_webhook }}
284 changes: 141 additions & 143 deletions .github/workflows/branch-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,81 +3,79 @@ name: Branch build
on:
push:
branches:
# - main
- respond-in-thread-by-default
- main
repository_dispatch:
types: [ trigger-e2e-tests ]

env:
HELM_VERSION: v3.9.0
K3D_VERSION: v5.4.6
IMAGE_REGISTRY: "ghcr.io"
IMAGE_REPOSITORY: "kubeshop/pr/botkube"
IMAGE_TAG: 1371-PR # TODO: Use commit hash tag to make the predictable builds for each commit on branch
IMAGE_REPOSITORY: "kubeshop/botkube"
IMAGE_TAG: v9.99.9-dev # TODO: Use commit hash tag to make the predictable builds for each commit on branch
GIT_USER: botkube-dev

jobs:
# extract-metadata:
# if: github.event_name != 'repository_dispatch' # skip if triggered by repository_dispatch
# runs-on: ubuntu-latest
# outputs:
# versions: ${{ steps.extract-version.outputs.versions }}
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# with:
# fetch-depth: 0
# - name: Extract version
# id: extract-version
# run: |
# IMAGE_VERSION=$(git rev-parse --short HEAD)
# echo "versions={\"image-version\":[\"v9.99.9-dev\",\"0.0.0-${IMAGE_VERSION}\"]}" >> $GITHUB_OUTPUT
# build:
# if: github.event_name != 'repository_dispatch' # skip if triggered by repository_dispatch
# needs: [extract-metadata]
# strategy:
# matrix: ${{ fromJson(needs.extract-metadata.outputs.versions) }}
# runs-on: ubuntu-latest
# env:
# GO111MODULE: on
# GOPATH: /home/runner/work/botkube
# GOBIN: /home/runner/work/botkube/bin
# DOCKER_CLI_EXPERIMENTAL: "enabled"
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Setup Go
# uses: actions/setup-go@v4
# with:
# go-version-file: 'go.mod'
# cache: true
# - name: Set up QEMU
# uses: docker/setup-qemu-action@v3
# - name: Docker Login
# uses: docker/login-action@v1
# with:
# registry: ghcr.io
# username: ${{ github.actor }}
# password: ${{ secrets.GITHUB_TOKEN }}
# - name: Install GoReleaser
# uses: goreleaser/goreleaser-action@v5
# with:
# install-only: true
# version: latest
# - name: Run GoReleaser
# run: |
# make release-snapshot
# env:
# ANALYTICS_API_KEY: ${{ secrets.ANALYTICS_API_KEY }}
# GORELEASER_CURRENT_TAG: ${{ matrix.image-version }}
# IMAGE_TAG: ${{ matrix.image-version }}
#
extract-metadata:
if: github.event_name != 'repository_dispatch' # skip if triggered by repository_dispatch
runs-on: ubuntu-latest
outputs:
versions: ${{ steps.extract-version.outputs.versions }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Extract version
id: extract-version
run: |
IMAGE_VERSION=$(git rev-parse --short HEAD)
echo "versions={\"image-version\":[\"v9.99.9-dev\",\"0.0.0-${IMAGE_VERSION}\"]}" >> $GITHUB_OUTPUT
build:
if: github.event_name != 'repository_dispatch' # skip if triggered by repository_dispatch
needs: [extract-metadata]
strategy:
matrix: ${{ fromJson(needs.extract-metadata.outputs.versions) }}
runs-on: ubuntu-latest
env:
GO111MODULE: on
GOPATH: /home/runner/work/botkube
GOBIN: /home/runner/work/botkube/bin
DOCKER_CLI_EXPERIMENTAL: "enabled"
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version-file: 'go.mod'
cache: true
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Docker Login
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
install-only: true
version: latest
- name: Run GoReleaser
run: |
make release-snapshot
env:
ANALYTICS_API_KEY: ${{ secrets.ANALYTICS_API_KEY }}
GORELEASER_CURRENT_TAG: ${{ matrix.image-version }}
IMAGE_TAG: ${{ matrix.image-version }}

integration-tests:
if: github.event_name != 'repository_dispatch' # skip if triggered by repository_dispatch
name: Integration tests
runs-on: ubuntu-latest
# needs: [ build ]
needs: [ build ]
permissions:
contents: read
packages: read
Expand Down Expand Up @@ -193,93 +191,93 @@ jobs:
run: |
KUBECONFIG=$(k3d kubeconfig write ${{ matrix.integration }}-test-cluster) \
make test-integration-${{ matrix.integration }}
#
# cli-migration-e2e:
# name: CLI Migration E2E tests
# runs-on: ubuntu-latest
# needs: [ build ]
# permissions:
# contents: read
# packages: read
# concurrency:
# group: cli-migration-e2e
# cancel-in-progress: false
# strategy:
# fail-fast: false
# steps:
# - name: Checkout code
# uses: actions/checkout@v4
# with:
# persist-credentials: false
# - name: Install GoReleaser
# uses: goreleaser/goreleaser-action@v5
# with:
# install-only: true
# version: latest
# - name: Setup Go
# uses: actions/setup-go@v4
# with:
# go-version-file: 'go.mod'
# cache: true
# - name: Setup Go modules
# uses: ./.github/actions/setup-go-mod-private
# with:
# access_token: ${{ secrets.E2E_TEST_GH_DEV_ACCOUNT_PAT }}
# username: ${{ env.GIT_USER }}
# - name: Run GoReleaser
# run: make release-snapshot-cli
# - name: Add botkube alias
# run: |
# echo BOTKUBE_BINARY_PATH="$PWD/dist/botkube-cli_linux_amd64_v1/botkube" >> $GITHUB_ENV
# - name: Install Helm
# uses: azure/setup-helm@v3
# with:
# version: ${{ env.HELM_VERSION }}
# - name: Download k3d
# run: "wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG=${K3D_VERSION} bash"
# - name: Create k3d cluster
# run: "k3d cluster create cli-migration-e2e-cluster --wait --timeout=5m"
# - name: Run e2e tests for botkube client
# env:
# DISCORD_BOT_ID: ${{ secrets.DISCORD_BOT_ID }}
# DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }}
# DISCORD_GUILD_ID: ${{ secrets.DISCORD_GUILD_ID }}
# DISCORD_TESTER_APP_TOKEN: ${{ secrets.DISCORD_TESTER_APP_TOKEN }}
# BOTKUBE_CLOUD_DEV_GQL_ENDPOINT: ${{ secrets.BOTKUBE_CLOUD_DEV_GQL_ENDPOINT }}
# BOTKUBE_CLOUD_DEV_REFRESH_TOKEN: ${{ secrets.BOTKUBE_CLOUD_DEV_REFRESH_TOKEN }}
# BOTKUBE_CLOUD_DEV_AUTH0_CLIENT_ID: ${{ secrets.BOTKUBE_CLOUD_DEV_AUTH0_CLIENT_ID }}
# run: |
# KUBECONFIG=$(k3d kubeconfig write cli-migration-e2e-cluster) make test-cli-migration-e2e
#
# - name: Upload artifacts
# uses: actions/upload-artifact@v3
# if: ${{ always() }}
# with:
# name: screenshots_dump_${{github.sha}}
# path: ${{ runner.temp }}/screenshots
# retention-days: 5
#
# - name: Dump cluster state
# if: ${{ failure() }}
# uses: ./.github/actions/dump-cluster
#
# - name: Slack Notification
# uses: rtCamp/action-slack-notify@v2
# if: ${{ failure() }}
# env:
# SLACK_USERNAME: Botkube Cloud CI
# SLACK_COLOR: 'red'
# SLACK_TITLE: 'Message'
# SLACK_CHANNEL: 'botkube-cloud-ci-alerts'
# SLACK_MESSAGE: 'CLI Migration E2E tests failed :scream:'
# SLACK_ICON_EMOJI: ':this-is-fine-fire:'
# SLACK_FOOTER: "Fingers crossed it's just an outdated/flaky test..."
# SLACK_WEBHOOK: ${{ secrets.SLACK_CI_ALERTS_WEBHOOK }}
cli-migration-e2e:
name: CLI Migration E2E tests
runs-on: ubuntu-latest
needs: [ build ]
permissions:
contents: read
packages: read
concurrency:
group: cli-migration-e2e
cancel-in-progress: false
strategy:
fail-fast: false
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Install GoReleaser
uses: goreleaser/goreleaser-action@v5
with:
install-only: true
version: latest
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version-file: 'go.mod'
cache: true
- name: Setup Go modules
uses: ./.github/actions/setup-go-mod-private
with:
access_token: ${{ secrets.E2E_TEST_GH_DEV_ACCOUNT_PAT }}
username: ${{ env.GIT_USER }}
- name: Run GoReleaser
run: make release-snapshot-cli
- name: Add botkube alias
run: |
echo BOTKUBE_BINARY_PATH="$PWD/dist/botkube-cli_linux_amd64_v1/botkube" >> $GITHUB_ENV
- name: Install Helm
uses: azure/setup-helm@v3
with:
version: ${{ env.HELM_VERSION }}
- name: Download k3d
run: "wget -q -O - https://raw.githubusercontent.com/k3d-io/k3d/main/install.sh | TAG=${K3D_VERSION} bash"
- name: Create k3d cluster
run: "k3d cluster create cli-migration-e2e-cluster --wait --timeout=5m"
- name: Run e2e tests for botkube client
env:
DISCORD_BOT_ID: ${{ secrets.DISCORD_BOT_ID }}
DISCORD_BOT_TOKEN: ${{ secrets.DISCORD_BOT_TOKEN }}
DISCORD_GUILD_ID: ${{ secrets.DISCORD_GUILD_ID }}
DISCORD_TESTER_APP_TOKEN: ${{ secrets.DISCORD_TESTER_APP_TOKEN }}
BOTKUBE_CLOUD_DEV_GQL_ENDPOINT: ${{ secrets.BOTKUBE_CLOUD_DEV_GQL_ENDPOINT }}
BOTKUBE_CLOUD_DEV_REFRESH_TOKEN: ${{ secrets.BOTKUBE_CLOUD_DEV_REFRESH_TOKEN }}
BOTKUBE_CLOUD_DEV_AUTH0_CLIENT_ID: ${{ secrets.BOTKUBE_CLOUD_DEV_AUTH0_CLIENT_ID }}
run: |
KUBECONFIG=$(k3d kubeconfig write cli-migration-e2e-cluster) make test-cli-migration-e2e
- name: Upload artifacts
uses: actions/upload-artifact@v3
if: ${{ always() }}
with:
name: screenshots_dump_${{github.sha}}
path: ${{ runner.temp }}/screenshots
retention-days: 5

- name: Dump cluster state
if: ${{ failure() }}
uses: ./.github/actions/dump-cluster

- name: Slack Notification
uses: rtCamp/action-slack-notify@v2
if: ${{ failure() }}
env:
SLACK_USERNAME: Botkube Cloud CI
SLACK_COLOR: 'red'
SLACK_TITLE: 'Message'
SLACK_CHANNEL: 'botkube-cloud-ci-alerts'
SLACK_MESSAGE: 'CLI Migration E2E tests failed :scream:'
SLACK_ICON_EMOJI: ':this-is-fine-fire:'
SLACK_FOOTER: "Fingers crossed it's just an outdated/flaky test..."
SLACK_WEBHOOK: ${{ secrets.SLACK_CI_ALERTS_WEBHOOK }}

cloud-slack-dev-e2e:
name: Botkube Cloud Slack Dev E2E
runs-on: ubuntu-latest
# needs: [ build ]
needs: [ build ]
permissions:
contents: read
packages: read
Expand Down
4 changes: 4 additions & 0 deletions test/commplatform/generic.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ type BotDriver interface {
Timeout() time.Duration
ReplaceBotNamePlaceholder(msg *interactive.CoreMessage, clusterName string)
AssertEquals(expectedMessage string) MessageAssertion
// OnChannel sets the expectation that the message should be posted in the channel. This is necessary when Bots
// by default expect a given message to be posted in the thread of the recently sent message.
// For example, in the context of source notification, we need to alter that default behavior
// and expect the message on the channel instead.
OnChannel() BotDriver
}

Expand Down
17 changes: 5 additions & 12 deletions test/commplatform/slack_tester.go
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,6 @@ func (s *SlackTester) AssertEquals(expectedMsg string) MessageAssertion {
}
}

func (s *SlackTester) restoreMsgTsIfNeeded() {
if s.restoreRecentlyPostedMsgTS != nil {
s.restoreRecentlyPostedMsgTS()
}
s.restoreRecentlyPostedMsgTS = nil
}
func (s *SlackTester) WaitForMessagePosted(userID, channelID string, limitMessages int, assertFn MessageAssertion) error {
defer s.restoreMsgTsIfNeeded()

Expand Down Expand Up @@ -586,6 +580,7 @@ func (s *SlackTester) trimAttachmentTimestamp(in string) (string, string) {
}

// OnChannel removes expectation that messages should be posted in the thread of recently sent message.
// After first assertion it restores expectation.
func (s *SlackTester) OnChannel() BotDriver {
old := make(map[string]string)
maps.Copy(old, s.recentlyPostedMsgTS)
Expand All @@ -596,13 +591,11 @@ func (s *SlackTester) OnChannel() BotDriver {
return s
}

// ExpectChannelMessageRestore removes expectation that messages should be posted in the thread of recently sent message.
func (s *SlackTester) ExpectChannelMessageRestore(channelID string) func() {
old := s.recentlyPostedMsgTS[channelID]
s.recentlyPostedMsgTS[channelID] = ""
return func() {
s.recentlyPostedMsgTS[channelID] = old
func (s *SlackTester) restoreMsgTsIfNeeded() {
if s.restoreRecentlyPostedMsgTS != nil {
s.restoreRecentlyPostedMsgTS()
}
s.restoreRecentlyPostedMsgTS = nil
}

var emojiSlackMapping = map[string]string{
Expand Down
Loading

0 comments on commit f42f3c5

Please sign in to comment.