diff --git a/.github/workflows/dapr.yml b/.github/workflows/dapr.yml index a7397d7ee15..cc8e3cfe37e 100644 --- a/.github/workflows/dapr.yml +++ b/.github/workflows/dapr.yml @@ -14,9 +14,8 @@ name: dapr on: - workflow_dispatch: schedule: - - cron: '00 22 * * *' + - cron: '00 22 * * *' push: branches: - master @@ -24,6 +23,7 @@ on: - feature/* tags: - v* + - x* pull_request: branches: - master @@ -34,7 +34,7 @@ jobs: name: Build ${{ matrix.target_os }}_${{ matrix.target_arch }} binaries runs-on: ${{ matrix.os }} env: - GOVER: "1.19" + GOVER: 1.19 GOLANGCILINT_VER: v1.48.0 PROTOC_VERSION: "21.1" GOOS: ${{ matrix.target_os }} @@ -72,19 +72,14 @@ jobs: image: tonistiigi/binfmt:latest platforms: arm64 - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v1 + uses: docker/setup-buildx-action@v2 if: matrix.target_os == 'linux' && github.event_name != 'pull_request' + with: + version: v0.10.1 # Don't use latest since it broke our workflow once - name: Check out code into the Go module directory uses: actions/checkout@v2 - - name: Parse release version and set REL_VERSION and LATEST_RELEASE + - name: Parse release version and set REL_VERSION run: python ./.github/scripts/get_release_version.py ${{ github.event_name }} - - name: Set REPO_OWNER - if: matrix.target_os != 'darwin' - run: | - REPO_OWNER=${{ github.repository_owner }} - # Lowercase the value - echo "REPO_OWNER=${REPO_OWNER,,}" >>${GITHUB_ENV} - shell: bash - name: Check white space in .md files if: matrix.target_os == 'linux' && github.event_name == 'pull_request' run: | @@ -104,42 +99,6 @@ jobs: echo >&2 exit 1 fi - - name: Cache Go modules (Linux) - if: matrix.target_os == 'linux' - uses: actions/cache@v3 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build- - - name: Cache Go modules (Windows) - if: matrix.target_os == 'windows' - uses: actions/cache@v3 - with: - path: | - ~\AppData\Local\go-build - ~\go\pkg\mod - key: ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build- - - name: Cache Go modules (macOS) - if: matrix.target_os == 'darwin' - uses: actions/cache@v3 - with: - path: | - ~/Library/Caches/go-build - ~/go/pkg/mod - key: ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ matrix.target_os }}-${{ matrix.target_arch }}-go-${{ env.GOVER }}-build- - - name: golangci-lint - if: matrix.target_arch == 'amd64' && matrix.target_os == 'linux' - uses: golangci/golangci-lint-action@v3.2.0 - with: - version: ${{ env.GOLANGCILINT_VER }} - skip-cache: true - name: Run go mod tidy check diff if: matrix.target_arch == 'amd64' && matrix.target_os == 'linux' run: make modtidy check-diff @@ -155,14 +114,6 @@ jobs: rm -r protoc protoc-${{ env.PROTOC_VERSION }}-linux-x86_64.zip make init-proto make gen-proto check-proto-diff - - name: Run make test - if: matrix.target_arch == 'amd64' - env: - COVERAGE_OPTS: "-coverprofile=coverage.txt -covermode=atomic" - run: make test - - name: Codecov - if: matrix.target_arch == 'amd64' && matrix.target_os == 'linux' - uses: codecov/codecov-action@v1 - name: Run make release to build and archive binaries env: GOOS: ${{ matrix.target_os }} @@ -183,292 +134,20 @@ jobs: with: name: dapr_grafana_dashboards path: ./grafana/*.json - - name: Docker Hub Login - if: matrix.target_os != 'darwin' && github.event_name != 'pull_request' && env.DOCKER_REGISTRY_ID != '' - uses: docker/login-action@v1 - env: - DOCKER_REGISTRY_ID: ${{ secrets.DOCKER_REGISTRY_ID }} - with: - username: ${{ secrets.DOCKER_REGISTRY_ID }} - password: ${{ secrets.DOCKER_REGISTRY_PASS }} - - name: GitHub Container Registry login - if: matrix.target_os != 'darwin' && github.event_name != 'pull_request' - uses: docker/login-action@v1 + - name: Configure AWS credentials + uses: aws-actions/configure-aws-credentials@v1 with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push Docker images to Docker Hub - if: matrix.target_os != 'darwin' && github.event_name != 'pull_request' && env.DOCKER_REGISTRY_ID != '' - env: - DOCKER_REGISTRY_ID: ${{ secrets.DOCKER_REGISTRY_ID }} - DAPR_REGISTRY: ${{ secrets.DOCKER_REGISTRY }} - TARGET_OS: ${{ matrix.target_os }} - TARGET_ARCH: ${{ matrix.target_arch }} - run: | - echo "Build Docker images and push to Docker Hub..." - DAPR_TAG=${{ env.REL_VERSION }} make docker-push + aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + aws-region: ap-southeast-1 - # Mariner images are built only on linux/amd64 and linux/arm64 - if [ "$TARGET_OS" = "linux" ] && [ "$TARGET_ARCH" != "arm" ]; then - DOCKERFILE=Dockerfile-mariner DAPR_TAG="${{ env.REL_VERSION }}-mariner" make docker-push - fi - shell: bash - - name: Build and push Docker images to GHCR + - name: Login to Amazon ECR if: matrix.target_os != 'darwin' && github.event_name != 'pull_request' - env: - DAPR_REGISTRY: ghcr.io/${{ env.REPO_OWNER }} - TARGET_OS: ${{ matrix.target_os }} - TARGET_ARCH: ${{ matrix.target_arch }} - run: | - echo "Build Docker images and push to GHCR..." - DAPR_TAG=${{ env.REL_VERSION }} make docker-push + id: login-ecr + uses: aws-actions/amazon-ecr-login@v1 - # Mariner images are built only on linux/amd64 and linux/arm64 - if [ "$TARGET_OS" = "linux" ] && [ "$TARGET_ARCH" != "arm" ]; then - DOCKERFILE=Dockerfile-mariner DAPR_TAG="${{ env.REL_VERSION }}-mariner" make docker-push - fi - shell: bash - - name: Upload test results - if: always() && matrix.target_arch == 'amd64' - uses: actions/upload-artifact@master - with: - name: ${{ matrix.target_os }}_${{ matrix.target_arch }}_test_unit.json - path: ${{ env.TEST_OUTPUT_FILE_PREFIX }}_unit.json - publish: - name: Publish docker image and binaries - needs: build - if: github.event_name != 'pull_request' - env: - ARTIFACT_DIR: ./release - HELM_PACKAGE_DIR: helm - DAPR_VERSION_ARTIFACT: dapr_version - DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }} - HELMVER: v3.7.2 - runs-on: ubuntu-latest - steps: - - name: Set up Helm ${{ env.HELMVER }} - uses: azure/setup-helm@v1 - with: - version: ${{ env.HELMVER }} - - name: Check out code into the Go module directory - uses: actions/checkout@v2 - - name: Parse release version and set REL_VERSION and LATEST_RELEASE - run: python ./.github/scripts/get_release_version.py ${{ github.event_name }} - - name: Set REPO_OWNER - if: matrix.target_os != 'darwin' - shell: bash - run: | - REPO_OWNER=${{ github.repository_owner }} - # Lowercase the value - echo "REPO_OWNER=${REPO_OWNER,,}" >>${GITHUB_ENV} - - name: Update Helm chart files for release version ${{ env.REL_VERSION }} - run: bash ./.github/scripts/set_helm_dapr_version.sh - - name: Generate Helm chart manifest - if: env.DOCKER_REGISTRY != '' - env: - DAPR_REGISTRY: ${{ env.DOCKER_REGISTRY }} - DAPR_TAG: ${{ env.REL_VERSION }} - run: | - make manifest-gen - shell: bash - - name: Move Helm chart manifest to artifact - if: env.DOCKER_REGISTRY != '' - run: | - mkdir -p ${{ env.ARTIFACT_DIR }} - mv ./dist/install/dapr.yaml ${{ env.ARTIFACT_DIR }}/dapr-operator.yaml - - name: "download artifact: dapr_linux_amd64" - uses: actions/download-artifact@master - with: - name: dapr_linux_amd64 - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_linux_arm" - uses: actions/download-artifact@master - with: - name: dapr_linux_arm - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_linux_arm64" - uses: actions/download-artifact@master - with: - name: dapr_linux_arm64 - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_windows_amd64" - uses: actions/download-artifact@master - with: - name: dapr_windows_amd64 - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_darwin_amd64" - uses: actions/download-artifact@master - with: - name: dapr_darwin_amd64 - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_darwin_arm64" - uses: actions/download-artifact@master - with: - name: dapr_darwin_arm64 - path: ${{ env.ARTIFACT_DIR }} - - name: "download artifact: dapr_grafana_dashboards" - uses: actions/download-artifact@master - with: - name: dapr_grafana_dashboards - path: ${{ env.ARTIFACT_DIR }} - - name: tar release binaries - run: | - IMAGE_ARCHS=(amd64 arm arm64) - for img_arch in "${IMAGE_ARCHS[@]}"; do - echo "Preparing linux_${img_arch} image..." - RELEASE_DIR=dist/linux_${img_arch}/release/ - mkdir -p $RELEASE_DIR - for tgzfile in $ARTIFACT_DIR/*linux_${img_arch}.tar.gz; do - echo "Extracting $tgzfile ..." - tar xzvf $tgzfile -C $RELEASE_DIR - done - done - - name: generate checksum files - run: cd ${ARTIFACT_DIR} && for i in *; do sha256sum -b $i > "$i.sha256"; done && cd - - - name: lists artifacts - run: ls -l ${{ env.ARTIFACT_DIR }} - - name: publish binaries to github - if: startswith(github.ref, 'refs/tags/v') - run: | - echo "installing github-release-cli..." - sudo npm install --silent --no-progress -g github-release-cli@2.1.0 - if [ "$LATEST_RELEASE" = "true" ]; then - export RELEASE_BODY=`cat ./docs/release_notes/v${REL_VERSION}.md` - else - export RELEASE_BODY="This is the release candidate ${REL_VERSION}" - fi - # Get the list of files - RELEASE_ARTIFACT=(${ARTIFACT_DIR}/*) - # Parse repository to get owner and repo names - OWNER_NAME="${GITHUB_REPOSITORY%%/*}" - REPO_NAME="${GITHUB_REPOSITORY#*/}" - export GITHUB_TOKEN=${{ secrets.DAPR_BOT_TOKEN }} - echo "Uploading Dapr Runtime Binaries to GitHub Release" - github-release upload \ - --owner $OWNER_NAME \ - --repo $REPO_NAME \ - --tag "v${REL_VERSION}" \ - --release-name "Dapr Runtime v${REL_VERSION}" \ - --body "${RELEASE_BODY}" \ - --prerelease true \ - ${RELEASE_ARTIFACT[*]} - shell: bash - - name: Docker Hub Login - uses: docker/login-action@v1 - if: matrix.target_os != 'darwin' && env.DOCKER_REGISTRY != '' - with: - username: ${{ secrets.DOCKER_REGISTRY_ID }} - password: ${{ secrets.DOCKER_REGISTRY_PASS }} - - name: GitHub Container Registry login - uses: docker/login-action@v1 - if: matrix.target_os != 'darwin' - with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push Docker multiarch manifest to Docker Hub - if: matrix.target_os != 'darwin' && env.DOCKER_REGISTRY_ID != '' - env: - DOCKER_REGISTRY_ID: ${{ secrets.DOCKER_REGISTRY_ID }} - DAPR_REGISTRY: ${{ secrets.DOCKER_REGISTRY }} - run: | - echo "Build Docker multiarch manifest and push to GHCR" - DAPR_TAG="${{ env.REL_VERSION }}" make docker-publish - - # Publish the `-mariner` tag - # Mariner images are built only on linux/amd64 and linux/arm64 - # Also, these use the "latest-mariner" tag if it's the latest - DOCKER_MULTI_ARCH="linux-amd64 linux-arm64" \ - DAPR_TAG="${{ env.REL_VERSION }}-mariner" \ - LATEST_TAG=latest-mariner \ - make docker-publish - shell: bash - - name: Build and push Docker multiarch manifest to GHCR - if: matrix.target_os != 'darwin' - env: - DAPR_REGISTRY: ghcr.io/${{ env.REPO_OWNER }} - run: | - echo "Build Docker multiarch manifest and push to GHCR" - DAPR_TAG="${{ env.REL_VERSION }}" make docker-publish - - # Publish the `-mariner` tag - # Mariner images are built only on linux/amd64 and linux/arm64 - # Also, these use the "latest-mariner" tag if it's the latest - DOCKER_MULTI_ARCH="linux-amd64 linux-arm64" \ - DAPR_TAG="${{ env.REL_VERSION }}-mariner" \ - LATEST_TAG=latest-mariner \ - make docker-publish - shell: bash - - name: Save release version - run: | - mkdir -p ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - echo ${REL_VERSION} > ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }}/${{ env.DAPR_VERSION_ARTIFACT }} - - name: Package Helm chart - if: ${{ env.LATEST_RELEASE }} == "true" && env.DOCKER_REGISTRY != '' - env: - HELM_CHARTS_DIR: charts/dapr - run: | - mkdir -p ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - helm package ${{ env.HELM_CHARTS_DIR }} --destination ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - - name: Upload Helm charts package to artifacts - if: ${{ env.LATEST_RELEASE }} == "true" && env.DOCKER_REGISTRY != '' - uses: actions/upload-artifact@master - with: - name: dapr_helm_charts_package - path: ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - # This job downloads the helm charts package artifact uploaded by the publish job, - # checks out the helm charts git hub pages repo and commits the latest version of - # helm charts package. - # This does not run on forks - helmpublish: - name: Publish helm charts to Helm github pages repo - needs: publish - if: startswith(github.ref, 'refs/tags/v') && github.repository_owner == 'dapr' - env: - ARTIFACT_DIR: ./release - DAPR_VERSION_ARTIFACT: dapr_version - HELM_PACKAGE_DIR: helm - runs-on: ubuntu-latest - steps: - - name: Create Helm charts directory - run: | - mkdir -p ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - - name: download artifacts - dapr_helm_charts_package - uses: actions/download-artifact@master - with: - name: dapr_helm_charts_package - path: ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - - name: Checkout Helm Charts Repo - uses: actions/checkout@v2 - env: - DAPR_HELM_REPO: dapr/helm-charts - DAPR_HELM_REPO_CODE_PATH: helm-charts - with: - repository: ${{ env.DAPR_HELM_REPO }} - ref: refs/heads/master - token: ${{ secrets.DAPR_BOT_TOKEN }} - path: ${{ env.DAPR_HELM_REPO_CODE_PATH }} - - name: Upload helm charts to Helm Repo - env: - DAPR_HELM_REPO_CODE_PATH: helm-charts - DAPR_HELM_REPO: https://dapr.github.io/helm-charts/ + - name: Build and push docker images to GitHub container registry + if: matrix.target_os != 'darwin' && github.event_name != 'pull_request' run: | - daprVersion=`cat ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }}/${{ env.DAPR_VERSION_ARTIFACT }}` - cd ${{ env.ARTIFACT_DIR }}/${{ env.HELM_PACKAGE_DIR }} - cp -r `ls -A | grep -v ${{ env.DAPR_VERSION_ARTIFACT }}` $GITHUB_WORKSPACE/${{ env.DAPR_HELM_REPO_CODE_PATH }} - cd $GITHUB_WORKSPACE/${{ env.DAPR_HELM_REPO_CODE_PATH }} - helm repo index --url ${{ env.DAPR_HELM_REPO }} --merge index.yaml . - git config --global user.email "daprweb@microsoft.com" - git config --global user.name "dapr-bot" - git add --all - # Check if the dapr-${daprVersion}.tgz file is modified. - if git diff --name-only --staged | grep -q ${daprVersion}; then - # If it is, we update the Helm chart, since this is an intentional update. - git commit -m "Release - $daprVersion" - git push - else - # If not, this update was accidentally triggered by tagging a release before updating the Helm chart. - echo "::error::There is no change for ${daprVersion} Helm chart. Did you forget to update the chart version before tagging?" - exit -1 - fi + echo "Build docker image and push image..." + make docker-push TARGET_OS=${{ matrix.target_os }} TARGET_ARCH=${{ matrix.target_arch }} DAPR_REGISTRY=798321202204.dkr.ecr.ap-southeast-1.amazonaws.com DAPR_TAG=${{ github.sha }} \ No newline at end of file diff --git a/README.md b/README.md index 09b4cb82440..84306118d5f 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@
-

Any language, any framework, anywhere

+

Any language1, any framework, anywhere

[![Go Report Card](https://goreportcard.com/badge/github.com/dapr/dapr)](https://goreportcard.com/report/github.com/dapr/dapr) diff --git a/docker/docker.mk b/docker/docker.mk index 1c69fda22ad..9e2515cbc76 100644 --- a/docker/docker.mk +++ b/docker/docker.mk @@ -18,8 +18,8 @@ DOCKERFILE_DIR?=./docker DAPR_SYSTEM_IMAGE_NAME?=$(RELEASE_NAME) DAPR_RUNTIME_IMAGE_NAME?=daprd -DAPR_PLACEMENT_IMAGE_NAME?=placement -DAPR_SENTRY_IMAGE_NAME?=sentry +DAPR_PLACEMENT_IMAGE_NAME?=dapr_placement +DAPR_SENTRY_IMAGE_NAME?=dapr_sentry # build docker image for linux BIN_PATH=$(OUT_DIR)/$(TARGET_OS)_$(TARGET_ARCH) diff --git a/docs/release_notes/v1.9.4.md b/docs/release_notes/v1.9.4.md new file mode 100644 index 00000000000..4a1b0ab972b --- /dev/null +++ b/docs/release_notes/v1.9.4.md @@ -0,0 +1,23 @@ +# Dapr 1.9.4 + +## Fixes MQTT pubsub component failure to read messages on startup when multiple subscriptions are configured + +### Problem + +When using the MQTT component users who had multiple subcriptions could encounter an issue where messages would stop being processed for the component. + +### Impact + +This issue impacts users of the MQTT pubsub component on Dapr 1.9.0-1.9.3 that subscribe to multiple topics using the same component. + +### Root cause + +The issue occurs when there are two or more subscriptions, messages are being published to the first topic only, and the subscriber gets killed after publishing a few messages. If the subscriber comes back online after a few (two or more) messages have been published already, then it will only deliver the first pending message and stop. + +In the situation above, Dapr could enter into a deadlock and stop processing messages from MQTT. + +The issue was traced back to an error in the upstream MQTT SDK used by Dapr + +### Solution + +We have upgraded the MQTT SDK used by Dapr to a new version which fixes the error. \ No newline at end of file diff --git a/docs/release_notes/v1.9.5.md b/docs/release_notes/v1.9.5.md new file mode 100644 index 00000000000..5f54e07c2cf --- /dev/null +++ b/docs/release_notes/v1.9.5.md @@ -0,0 +1,85 @@ +# Dapr 1.9.5 + +- Fixes a panic in the Azure Cosmos DB state store component when performing transaction request with ETags +- Fixes component initialization failure when the built-in Kubernetes secret store is disabled +- Fixes nil dereference crash in placement membership heartbeat loop in sidecar +- Fixes MQTT message acknowledgement for retained messages + +## Fixes a panic in the Azure Cosmos DB state store component when performing transaction request with ETags + +### Problem + +When setting any ETag in a transaction request with the Azure Cosmos DB state store, Dapr panics with a nil pointer dereference. + +### Impact + +This issue impacts all users of the Azure Cosmos DB state store on Dapr 1.9.0-1.9.4. + +### Root cause + +When setting an ETag on a transaction request in the Azure Cosmos DB state store, a bug causes Dapr to panic. + +### Solution + +We fixed a bug that caused Dapr to panic. + + +## Fixes component initialization failure when the built-in Kubernetes secret store is disabled + +### Problem + +When running on Kubernetes, Dapr automatically initializes a Kubernetes secret store in each sidecar. Starting with Dapr 1.8, this behavior can be [turned off](https://docs.dapr.io/reference/arguments-annotations-overview/) using the `dapr.io/disable-builtin-k8s-secret-store`. + +However, with the built-in Kubernetes secret store disabled, an error prevented components from being able to retrieve secrets [stored as Kubernetes secrets](https://docs.dapr.io/operations/components/component-secrets/#referencing-a-kubernetes-secret) during initialization. This caused components to fail to initialize due to not being able to read secrets, for example connection strings or passwords. + +### Impact + +The issue impacts users on Dapr 1.8.0-1.9.4 who want to disable the built-in Kubernetes secret store. + +### Root cause + +In Dapr, components that use secrets stored as Kubernetes secrets should not need the built-in Kubernetes secret store to be loaded to work. This is because the Dapr Operator service populates the secrets from the Kubernetes secret store and passes them to the sidecar automatically. + +However, during initialization of a component that references a secret stored in Kubernetes, a bug caused Dapr to return an error if the built-in Kubernetes secret store was disabled, and the value of the secret as included by the Dapr Operator was ignored. + +### Solution + +We have implemented a fix in the component initialization sequence. Now, components that reference secrets from the Kubernetes secret store do not need the built-in Kubernetes secret store to be enabled anymore. + + +## Fixes panic in actor placement membership in Dapr sidecar + +### Problem + +When recovering from a failure in the connection to the Dapr placement service, the Dapr sidecar could have encountered a panic in some cases. + +### Impact + +The issue can impact all Dapr users on Dapr 1.7.0-1.9.4 using actors. + +### Root cause + +We identified a race condition in the actor placement service client that could have caused the Dapr to panic after recovering from a failure. + +### Solution + +We updated actor placement service to address the race condition and remove the cause for the panic. + + +## Fixes MQTT message acknowledgement for retained messages + +### Problem + +Retained MQTT messages should be only processed once, however, they were not being acknowledged and thus were resent indefinitely. + +### Impact + +This issue impacts all users of the MQTT PubSub component on Dapr 1.9.0-1.9.4, where-in a subscriber using MQTT component receives a `retained` message. + +### Root cause + +MQTT retained messages were never being acknowledged and were therefore being resent indefinitely. + +### Solution + +We updated Dapr to acknowledge a retained message in the MQTT PubSub component. \ No newline at end of file diff --git a/go.mod b/go.mod index 81bd6c7228d..a1326f05369 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/PuerkitoBio/purell v1.1.1 github.com/agrea/ptr v0.0.0-20180711073057-77a518d99b7b github.com/cenkalti/backoff/v4 v4.1.3 - github.com/dapr/components-contrib v1.9.1 + github.com/dapr/components-contrib v1.9.6 github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 github.com/fasthttp/router v1.4.12 github.com/fsnotify/fsnotify v1.5.4 @@ -175,7 +175,7 @@ require ( github.com/eapache/go-resiliency v1.2.0 // indirect github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect github.com/eapache/queue v1.1.0 // indirect - github.com/eclipse/paho.mqtt.golang v1.3.5 // indirect + github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 // indirect github.com/emicklei/go-restful v2.9.5+incompatible // indirect github.com/emirpasic/gods v1.12.0 // indirect github.com/evanphx/json-patch v4.12.0+incompatible // indirect @@ -388,17 +388,17 @@ require ( ) replace ( + github.com/dapr/components-contrib v1.9.6 => github.com/TheLandGame/components-contrib v0.0.0-20241122170834-508d9cbfe046 github.com/toolkits/concurrent => github.com/niean/gotools v0.0.0-20151221085310-ff3f51fc5c60 gopkg.in/couchbaselabs/gocbconnstr.v1 => github.com/couchbaselabs/gocbconnstr v1.0.5 k8s.io/client => github.com/kubernetes-client/go v0.0.0-20190928040339-c757968c4c36 ) -replace github.com/eclipse/paho.mqtt.golang => github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 - // Uncomment for local development for testing with changes in the components-contrib repository. // Don't commit with this uncommented! // // replace github.com/dapr/components-contrib => ../components-contrib + // // Then, run `make modtidy` in this repository. // This ensures that go.mod and go.sum are up-to-date. diff --git a/go.sum b/go.sum index 2be44c64bdf..99ccd01fb9e 100644 --- a/go.sum +++ b/go.sum @@ -228,6 +228,8 @@ github.com/Shopify/toxiproxy/v2 v2.1.6-0.20210914104332-15ea381dcdae/go.mod h1:/ github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46 h1:5sXbqlSomvdjlRbWyNqkPsJ3Fg+tQZCbgeX1VGljbQY= github.com/StackExchange/wmi v0.0.0-20210224194228-fe8f1750fd46/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/TheLandGame/components-contrib v0.0.0-20241122170834-508d9cbfe046 h1:7ciYMota8fW0LACi28k/Fg1wGSp/B71SefmhQ3w73PI= +github.com/TheLandGame/components-contrib v0.0.0-20241122170834-508d9cbfe046/go.mod h1:U0cjxEEbZR7sNN9i1ZdWnkIOZP8iRSvoyF2gRhBaHfc= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= @@ -593,8 +595,6 @@ github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3E github.com/danieljoos/wincred v1.1.0/go.mod h1:XYlo+eRTsVA9aHGp7NGjFkPla4m+DCL7hqDjlFjiygg= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/dapr/components-contrib v1.9.1 h1:g2TpEwvnB4s5Lvf89QXzAlj3xaWGaxTZIhTY4LpIfYI= -github.com/dapr/components-contrib v1.9.1/go.mod h1:ftVthBjl0e5G61J5XKkZKEjU/TGE0gNT9fJCNAdUjU8= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 h1:XDb+PwAOxbVNvLxkmwPgKlH5ltYlDdz/GcEDMe8RJxE= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= github.com/dave/jennifer v1.4.0/go.mod h1:fIb+770HOpJ2fmN9EPPKOqm1vMGhB+TwXKMZhrIygKg= @@ -681,6 +681,8 @@ github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8 github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= +github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4 h1:yJj84YKRTY+zu/s9peWf0kuSq38zKT4KJUaFcJ1uRJM= +github.com/eclipse/paho.mqtt.golang v1.4.2-0.20221018190109-a1800d8df9a4/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= @@ -1768,8 +1770,6 @@ github.com/shirou/gopsutil v3.20.11+incompatible h1:LJr4ZQK4mPpIV5gOa4jCOKOGb4ty github.com/shirou/gopsutil v3.20.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shirou/gopsutil/v3 v3.21.6 h1:vU7jrp1Ic/2sHB7w6UNs7MIkn7ebVtTb5D9j45o9VYE= github.com/shirou/gopsutil/v3 v3.21.6/go.mod h1:JfVbDpIBLVzT8oKbvMg9P3wEIMDDpVn+LwHTKj0ST88= -github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8 h1:BXKXQzeHuVnSrHAKjvq9ICrgPC27tJ/hXWLMQo36c5s= -github.com/shivamkm07/paho.mqtt.golang v1.3.6-0.20220106130409-e28a1db639f8/go.mod h1:JGt0RsEwEX+Xa/agj90YJ9d9DH2b7upDZMK9HRbFvCA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= diff --git a/pkg/actors/internal/placement.go b/pkg/actors/internal/placement.go index 0e09e02bbd5..91a4b1fd4e6 100644 --- a/pkg/actors/internal/placement.go +++ b/pkg/actors/internal/placement.go @@ -306,12 +306,10 @@ func (p *ActorPlacement) closeStream() { if p.clientStream != nil { p.clientStream.CloseSend() - p.clientStream = nil } if p.clientConn != nil { p.clientConn.Close() - p.clientConn = nil } }() diff --git a/pkg/actors/internal/placement_test.go b/pkg/actors/internal/placement_test.go index 211dd69e834..4be976d68cb 100644 --- a/pkg/actors/internal/placement_test.go +++ b/pkg/actors/internal/placement_test.go @@ -14,6 +14,7 @@ limitations under the License. package internal import ( + "errors" "fmt" "io" "net" @@ -142,6 +143,106 @@ func TestAppHealthyStatus(t *testing.T) { cleanup() } +type fakeStream struct { + //nolint:nosnakecase + placementv1pb.Placement_ReportDaprStatusClient + send func(host *placementv1pb.Host) error + recv func() (*placementv1pb.PlacementOrder, error) + closeSendCalled atomic.Int64 +} + +func (f *fakeStream) Send(host *placementv1pb.Host) error { + return f.send(host) +} + +func (f *fakeStream) Recv() (*placementv1pb.PlacementOrder, error) { + return f.recv() +} + +func (f *fakeStream) CloseSend() error { + f.closeSendCalled.Add(1) + return nil +} + +func TestCloseOnRecv(t *testing.T) { + t.Run("should not panic", func(t *testing.T) { + address, testSrv, cleanup := newTestServer() + + // set leader + testSrv.setLeader(true) + + appHealth := atomic.Bool{} + appHealth.Store(true) + + appHealthFunc := appHealth.Load + noopTableUpdateFunc := func() {} + testPlacement := NewActorPlacement( + []string{address}, nil, "testAppID", "127.0.0.1:1000", []string{"actorOne", "actorTwo"}, + appHealthFunc, noopTableUpdateFunc) + + // act + testPlacement.Start() + + assert.NotNil(t, testPlacement.clientStream) + + var called int + recvGroup := sync.WaitGroup{} + recvGroup.Add(1) + + closeGroup := sync.WaitGroup{} + closeGroup.Add(1) + + testPlacement.clientLock.Lock() + fs := &fakeStream{ + recv: func() (*placementv1pb.PlacementOrder, error) { + defer func() { + called++ + }() + if called == 0 { // first call should close stream and wait + recvGroup.Done() + closeGroup.Wait() + return &placementv1pb.PlacementOrder{ + Operation: unlockOperation, + }, nil + } + + if called == 1 { // force reconnect + return nil, errors.New("force reconnect") + } + + return &placementv1pb.PlacementOrder{ + Operation: unlockOperation, + }, nil + }, + send: func(host *placementv1pb.Host) error { + return nil + }, + } + testPlacement.clientStream = fs + testPlacement.clientLock.Unlock() + + go func() { + recvGroup.Wait() + testPlacement.closeStream() + closeGroup.Done() + }() + // should not panic + closeGroup.Wait() + testPlacement.streamConnectedCond.L.Lock() + for !testPlacement.streamConnAlive { + testPlacement.streamConnectedCond.Wait() + } + testPlacement.streamConnectedCond.L.Unlock() + + assert.Equal(t, called, 2) + assert.GreaterOrEqual(t, fs.closeSendCalled.Load(), int64(2)) + assert.NotEqual(t, testPlacement.clientStream, fs) + // clean up + testPlacement.Stop() + cleanup() + }) +} + func TestOnPlacementOrder(t *testing.T) { tableUpdateCount := 0 appHealthFunc := func() bool { return true } diff --git a/pkg/http/api.go b/pkg/http/api.go index 8f2a9baa5de..37314198433 100644 --- a/pkg/http/api.go +++ b/pkg/http/api.go @@ -408,7 +408,7 @@ func (a *api) constructHealthzEndpoints() []Endpoint { return []Endpoint{ { Methods: []string{fasthttp.MethodGet}, - Route: "healthz", + Route: "healthz/{appId:*}", Version: apiVersionV1, Handler: a.onGetHealthz, }, @@ -1357,6 +1357,7 @@ func (a *api) getStateStoreName(reqCtx *fasthttp.RequestCtx) string { } func (a *api) onDirectMessage(reqCtx *fasthttp.RequestCtx) { + log.Infof("Received direct message: %s, startAt: %d", reqCtx.RequestURI(), time.Now().UnixMilli()) targetID := a.findTargetID(reqCtx) if targetID == "" { msg := NewErrorResponse("ERR_DIRECT_INVOKE", messages.ErrDirectInvokeNoAppID) @@ -2020,7 +2021,13 @@ func (a *api) onGetHealthz(reqCtx *fasthttp.RequestCtx) { respond(reqCtx, withError(fasthttp.StatusInternalServerError, msg)) log.Debug(msg) } else { - respond(reqCtx, withEmpty()) + matchAppId := reqCtx.UserValue("appId").(string) + if matchAppId != "" && matchAppId != a.id { + msg := NewErrorResponse("ERR_HEALTH_APPID_NOT_MATCH", messages.ErrHealthAppIdNotMatch) + respond(reqCtx, withError(fasthttp.StatusInternalServerError, msg)) + } else { + respond(reqCtx, withEmpty()) + } } } diff --git a/pkg/messages/api_errors.go b/pkg/messages/api_errors.go index cc5a2f87026..a8cc603096b 100644 --- a/pkg/messages/api_errors.go +++ b/pkg/messages/api_errors.go @@ -70,7 +70,8 @@ const ( ErrMetadataGet = "failed deserializing metadata: %s" // Healthz. - ErrHealthNotReady = "dapr is not ready" + ErrHealthNotReady = "dapr is not ready" + ErrHealthAppIdNotMatch = "dapr appId is not match" // Configuration. ErrConfigurationStoresNotConfigured = "error configuration stores not configured" diff --git a/pkg/messaging/direct_messaging.go b/pkg/messaging/direct_messaging.go index bc202aa1802..53dd740d193 100644 --- a/pkg/messaging/direct_messaging.go +++ b/pkg/messaging/direct_messaging.go @@ -129,7 +129,10 @@ func (d *directMessaging) Invoke(ctx context.Context, targetAppID string, req *i } if app.id == d.appID && app.namespace == d.namespace { - return d.invokeLocal(ctx, req) + log.Infof("invoke local app: %s.%s startAt: %d", app.id, app.namespace, time.Now().UnixMilli()) + result, err := d.invokeLocal(ctx, req) + log.Infof("invoke local app: %s.%s endAt: %d", app.id, app.namespace, time.Now().UnixMilli()) + return result, err } return d.invokeWithRetry(ctx, retry.DefaultLinearRetryCount, retry.DefaultLinearBackoffInterval, app, d.invokeRemote, req) } diff --git a/pkg/runtime/runtime.go b/pkg/runtime/runtime.go index 08d31984591..c83ca3a9a54 100644 --- a/pkg/runtime/runtime.go +++ b/pkg/runtime/runtime.go @@ -2459,11 +2459,6 @@ func (a *DaprRuntime) processComponentSecrets(component componentsV1alpha1.Compo } secretStoreName := a.authSecretStoreOrDefault(component) - secretStore := a.getSecretStore(secretStoreName) - if secretStore == nil { - log.Warnf("component %s references a secret store that isn't loaded: %s", component.Name, secretStoreName) - return component, secretStoreName - } // If running in Kubernetes, do not fetch secrets from the Kubernetes secret store as they will be populated by the operator. // Instead, base64 decode the secret values into their real self. @@ -2491,6 +2486,12 @@ func (a *DaprRuntime) processComponentSecrets(component componentsV1alpha1.Compo continue } + secretStore := a.getSecretStore(secretStoreName) + if secretStore == nil { + log.Warnf("component %s references a secret store that isn't loaded: %s", component.Name, secretStoreName) + return component, secretStoreName + } + resp, ok := cache[m.SecretKeyRef.Name] if !ok { // TODO: cascade context. diff --git a/tests/apps/pluggable_kafka-bindings/go.mod b/tests/apps/pluggable_kafka-bindings/go.mod index aa31c5eeefe..c8883c159da 100644 --- a/tests/apps/pluggable_kafka-bindings/go.mod +++ b/tests/apps/pluggable_kafka-bindings/go.mod @@ -6,7 +6,7 @@ replace github.com/dapr/dapr => ../../../ require ( github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb - github.com/dapr/components-contrib v1.9.1 + github.com/dapr/components-contrib v1.9.6 github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 ) diff --git a/tests/apps/pluggable_kafka-bindings/go.sum b/tests/apps/pluggable_kafka-bindings/go.sum index eb0c58ecc58..5ce705b9443 100644 --- a/tests/apps/pluggable_kafka-bindings/go.sum +++ b/tests/apps/pluggable_kafka-bindings/go.sum @@ -56,8 +56,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb h1:N35TA4ra10ZTCk66IiP2jCUcH8HKnN78MGyuO/64Gn0= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb/go.mod h1:ybLpIBlVHbHt17ovO+19PyC4iIHGbuSstX1XPvHRYLo= -github.com/dapr/components-contrib v1.9.1 h1:g2TpEwvnB4s5Lvf89QXzAlj3xaWGaxTZIhTY4LpIfYI= -github.com/dapr/components-contrib v1.9.1/go.mod h1:ftVthBjl0e5G61J5XKkZKEjU/TGE0gNT9fJCNAdUjU8= +github.com/dapr/components-contrib v1.9.6 h1:C12fnZhNim8AsOzTCsWZDZ0MXqsaG161fStVuVAQgN4= +github.com/dapr/components-contrib v1.9.6/go.mod h1:U0cjxEEbZR7sNN9i1ZdWnkIOZP8iRSvoyF2gRhBaHfc= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 h1:XDb+PwAOxbVNvLxkmwPgKlH5ltYlDdz/GcEDMe8RJxE= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/apps/pluggable_redis-pubsub/go.mod b/tests/apps/pluggable_redis-pubsub/go.mod index 12f83c70227..18d5597043f 100644 --- a/tests/apps/pluggable_redis-pubsub/go.mod +++ b/tests/apps/pluggable_redis-pubsub/go.mod @@ -6,7 +6,7 @@ replace github.com/dapr/dapr => ../../../ require ( github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb - github.com/dapr/components-contrib v1.9.1 + github.com/dapr/components-contrib v1.9.6 github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 ) diff --git a/tests/apps/pluggable_redis-pubsub/go.sum b/tests/apps/pluggable_redis-pubsub/go.sum index a74aa1a075e..ea23069e8c4 100644 --- a/tests/apps/pluggable_redis-pubsub/go.sum +++ b/tests/apps/pluggable_redis-pubsub/go.sum @@ -15,8 +15,8 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb h1:N35TA4ra10ZTCk66IiP2jCUcH8HKnN78MGyuO/64Gn0= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb/go.mod h1:ybLpIBlVHbHt17ovO+19PyC4iIHGbuSstX1XPvHRYLo= -github.com/dapr/components-contrib v1.9.1 h1:g2TpEwvnB4s5Lvf89QXzAlj3xaWGaxTZIhTY4LpIfYI= -github.com/dapr/components-contrib v1.9.1/go.mod h1:ftVthBjl0e5G61J5XKkZKEjU/TGE0gNT9fJCNAdUjU8= +github.com/dapr/components-contrib v1.9.6 h1:C12fnZhNim8AsOzTCsWZDZ0MXqsaG161fStVuVAQgN4= +github.com/dapr/components-contrib v1.9.6/go.mod h1:U0cjxEEbZR7sNN9i1ZdWnkIOZP8iRSvoyF2gRhBaHfc= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 h1:XDb+PwAOxbVNvLxkmwPgKlH5ltYlDdz/GcEDMe8RJxE= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/tests/apps/pluggable_redis-statestore/go.mod b/tests/apps/pluggable_redis-statestore/go.mod index cbaf3f73f43..0729500f4a6 100644 --- a/tests/apps/pluggable_redis-statestore/go.mod +++ b/tests/apps/pluggable_redis-statestore/go.mod @@ -6,7 +6,7 @@ replace github.com/dapr/dapr => ../../../ require ( github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb - github.com/dapr/components-contrib v1.9.1 + github.com/dapr/components-contrib v1.9.6 github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 ) diff --git a/tests/apps/pluggable_redis-statestore/go.sum b/tests/apps/pluggable_redis-statestore/go.sum index 87920c78dcb..5b0661a1091 100644 --- a/tests/apps/pluggable_redis-statestore/go.sum +++ b/tests/apps/pluggable_redis-statestore/go.sum @@ -19,8 +19,8 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb h1:N35TA4ra10ZTCk66IiP2jCUcH8HKnN78MGyuO/64Gn0= github.com/dapr-sandbox/components-go-sdk v0.0.0-20220928114348-32097c6273eb/go.mod h1:ybLpIBlVHbHt17ovO+19PyC4iIHGbuSstX1XPvHRYLo= -github.com/dapr/components-contrib v1.9.1 h1:g2TpEwvnB4s5Lvf89QXzAlj3xaWGaxTZIhTY4LpIfYI= -github.com/dapr/components-contrib v1.9.1/go.mod h1:ftVthBjl0e5G61J5XKkZKEjU/TGE0gNT9fJCNAdUjU8= +github.com/dapr/components-contrib v1.9.6 h1:C12fnZhNim8AsOzTCsWZDZ0MXqsaG161fStVuVAQgN4= +github.com/dapr/components-contrib v1.9.6/go.mod h1:U0cjxEEbZR7sNN9i1ZdWnkIOZP8iRSvoyF2gRhBaHfc= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7 h1:XDb+PwAOxbVNvLxkmwPgKlH5ltYlDdz/GcEDMe8RJxE= github.com/dapr/kit v0.0.3-0.20220930182601-272e358ba6a7/go.mod h1:FR+yc0R0szlKnJooVqJvl7FhWf21wzY4/EzmyFQrESw= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= diff --git a/trigger-build.txt b/trigger-build.txt new file mode 100644 index 00000000000..5f5fbe759f1 --- /dev/null +++ b/trigger-build.txt @@ -0,0 +1,3 @@ +1 +2 +3 \ No newline at end of file