diff --git a/.editorconfig b/.editorconfig index 1a4fb776a..f8951dafe 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,6 +1,3 @@ -# EditorConfig is awesome: -http://EditorConfig.org - # top-most EditorConfig file root = true @@ -142,5 +139,5 @@ indent_size = 2 [*.{cmd,ps1}] indent_size = 8 -[*.{yaml, yml}] +[*.{yaml,yml}] indent_size = 2 diff --git a/.github/workflows/base.yml b/.github/workflows/base.yml index 1c06abeb8..752de25fb 100644 --- a/.github/workflows/base.yml +++ b/.github/workflows/base.yml @@ -2,51 +2,67 @@ name: Build on: workflow_call: + secrets: + CLOUDSMITH_CICD_USER: + required: false + CLOUDSMITH_CICD_TOKEN: + required: false inputs: docker-tag: required: true type: string + docker-image: + required: false + type: string + default: eventstore-ce/eventstoredb-ce + test: + required: true + type: string jobs: test: timeout-minutes: 20 - strategy: + strategy: fail-fast: false matrix: framework: [ net6.0, net7.0, net8.0 ] os: [ ubuntu-latest ] - test: [ Streams, PersistentSubscriptions, Operations, UserManagement, ProjectionManagement ] configuration: [ release ] runs-on: ${{ matrix.os }} - name: EventStore.Client.${{ matrix.test }}/${{ matrix.os }}/${{ matrix.framework }}/${{ inputs.docker-tag }} + name: ${{ inputs.test }} (${{ matrix.os }}, ${{ matrix.framework }}) + env: + CLOUDSMITH_CICD_USER: ${{ secrets.CLOUDSMITH_CICD_USER }} steps: - - name: Checkout - uses: actions/checkout@v3 - - shell: bash - run: | - git fetch --prune --unshallow - - name: Pull EventStore Image - shell: bash - run: | - docker pull docker.eventstore.com/eventstore-ce/eventstoredb-ce:${{ inputs.docker-tag }} - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x - - name: Compile - shell: bash - run: | - dotnet build --configuration ${{ matrix.configuration }} --framework ${{ matrix.framework }} src/EventStore.Client.${{ matrix.test }} - - name: Run Tests - shell: bash - env: - ES_DOCKER_TAG: ${{ inputs.docker-tag }} - run: | - sudo ./gencert.sh - dotnet test --configuration ${{ matrix.configuration }} --blame \ - --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \ - --framework ${{ matrix.framework }} \ - test/EventStore.Client.${{ matrix.test }}.Tests + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Login to Cloudsmith + if: ${{ env.CLOUDSMITH_CICD_USER != '' }} + uses: docker/login-action@v3 + with: + registry: docker.eventstore.com + username: ${{ secrets.CLOUDSMITH_CICD_USER }} + password: ${{ secrets.CLOUDSMITH_CICD_TOKEN }} + - name: Pull EventStore Image + shell: bash + run: | + docker pull docker.eventstore.com/${{ inputs.docker-image }}:${{ inputs.docker-tag }} + - name: Install dotnet SDKs + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 6.0.x + 7.0.x + 8.0.x + - name: Run Tests + shell: bash + env: + ES_DOCKER_TAG: ${{ inputs.docker-tag }} + ES_DOCKER_REGISTRY: docker.eventstore.com/${{ inputs.docker-image }} + run: | + sudo ./gencert.sh + dotnet test --configuration ${{ matrix.configuration }} --blame \ + --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \ + --framework ${{ matrix.framework }} \ + test/EventStore.Client.${{ inputs.test }}.Tests diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 31add45a8..4b8e1f9b1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,15 +1,39 @@ -name: Test CI +name: CI on: pull_request: push: branches: - - master + - master tags: - - v* + - v* jobs: - test: + ce: uses: ./.github/workflows/base.yml + strategy: + fail-fast: false + matrix: + docker-tag: [ ci, lts, previous-lts ] + test: [ Streams, PersistentSubscriptions, Operations, UserManagement, ProjectionManagement ] + name: Test CE (${{ matrix.docker-tag }}) with: - docker-tag: ci + docker-tag: ${{ matrix.docker-tag }} + docker-image: eventstore-ce/eventstoredb-ce + test: ${{ matrix.test }} + ee: + uses: ./.github/workflows/base.yml + if: ${{ github.repository_owner == 'EventStore' }} + strategy: + fail-fast: false + matrix: + docker-tag: [ 24.2.0-jammy ] + test: [ Plugins ] + name: Test EE (${{ matrix.docker-tag }}) + with: + docker-tag: ${{ matrix.docker-tag }} + docker-image: eventstore-ee/eventstoredb-commercial + test: ${{ matrix.test }} + secrets: + CLOUDSMITH_CICD_USER: ${{ secrets.CLOUDSMITH_CICD_USER }} + CLOUDSMITH_CICD_TOKEN: ${{ secrets.CLOUDSMITH_CICD_TOKEN }} diff --git a/.github/workflows/dispatch-ce.yml b/.github/workflows/dispatch-ce.yml new file mode 100644 index 000000000..722baaea7 --- /dev/null +++ b/.github/workflows/dispatch-ce.yml @@ -0,0 +1,26 @@ +name: Dispatch CE + +on: + workflow_dispatch: + inputs: + docker-tag: + description: "Docker tag" + required: true + type: string + docker-image: + description: "Docker image" + required: true + type: string + +jobs: + test: + uses: ./.github/workflows/base.yml + strategy: + fail-fast: false + matrix: + test: [ Streams, PersistentSubscriptions, Operations, UserManagement, ProjectionManagement ] + name: Test CE (${{ inputs.docker-tag }}) + with: + docker-tag: ${{ inputs.docker-tag }} + docker-image: ${{ inputs.docker-image }} + test: ${{ matrix.test }} diff --git a/.github/workflows/dispatch-ee.yml b/.github/workflows/dispatch-ee.yml new file mode 100644 index 000000000..13f0b3398 --- /dev/null +++ b/.github/workflows/dispatch-ee.yml @@ -0,0 +1,29 @@ +name: Dispatch EE + +on: + workflow_dispatch: + inputs: + docker-tag: + description: "Docker tag" + required: true + type: string + docker-image: + description: "Docker image" + required: true + type: string + +jobs: + test: + uses: ./.github/workflows/base.yml + strategy: + fail-fast: false + matrix: + test: [ Plugins ] + name: Test EE (${{ inputs.docker-tag }}) + with: + docker-tag: ${{ inputs.docker-tag }} + docker-image: ${{ inputs.docker-image }} + test: ${{ matrix.test }} + secrets: + CLOUDSMITH_CICD_USER: ${{ secrets.CLOUDSMITH_CICD_USER }} + CLOUDSMITH_CICD_TOKEN: ${{ secrets.CLOUDSMITH_CICD_TOKEN }} diff --git a/.github/workflows/dispatch.yml b/.github/workflows/dispatch.yml deleted file mode 100644 index 927050291..000000000 --- a/.github/workflows/dispatch.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: "Dispatch" - -on: - workflow_dispatch: - inputs: - version: - description: "Docker tag version" - required: true - type: string - -jobs: - test: - uses: ./.github/workflows/base.yml - with: - docker-tag: ${{ inputs.version }} diff --git a/.github/workflows/ee.yml b/.github/workflows/ee.yml deleted file mode 100644 index a5b2951b6..000000000 --- a/.github/workflows/ee.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Test EE - -on: - pull_request: - push: - branches: - - master - tags: - - v* - -jobs: - test: - timeout-minutes: 20 - strategy: - fail-fast: false - matrix: - framework: [ net6.0, net7.0, net8.0 ] - os: [ ubuntu-latest ] - build: [ Streams, PersistentSubscriptions, Operations, UserManagement, ProjectionManagement ] - test: [ Plugins ] - configuration: [ release ] - runs-on: ${{ matrix.os }} - name: EventStore.Client.${{ matrix.test }}/${{ matrix.os }}/${{ matrix.framework }}/24.2.0-jammy - steps: - - name: Checkout - uses: actions/checkout@v3 - - shell: bash - run: | - git fetch --prune --unshallow - - name: Login to Cloudsmith - uses: docker/login-action@v3 - with: - registry: docker.eventstore.com - username: ${{ secrets.CLOUDSMITH_CICD_USER }} - password: ${{ secrets.CLOUDSMITH_CICD_TOKEN }} - - name: Pull EventStore Image - shell: bash - run: | - docker pull docker.eventstore.com/eventstore-ee/eventstoredb-commercial:24.2.0-jammy - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x - - name: Compile - shell: bash - run: | - dotnet build --configuration ${{ matrix.configuration }} --framework ${{ matrix.framework }} src/EventStore.Client.${{ matrix.build }} - - name: Run Tests - if: ${{ inputs.docker-registry == '' }} - shell: bash - env: - ES_DOCKER_TAG: 24.2.0-jammy - ES_DOCKER_REGISTRY: docker.eventstore.com/eventstore-ee/eventstoredb-commercial - run: | - sudo ./gencert.sh - dotnet test --configuration ${{ matrix.configuration }} --blame \ - --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \ - --framework ${{ matrix.framework }} \ - test/EventStore.Client.${{ matrix.test }}.Tests diff --git a/.github/workflows/lts.yml b/.github/workflows/lts.yml deleted file mode 100644 index fd4e45bb1..000000000 --- a/.github/workflows/lts.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Test LTS - -on: - pull_request: - push: - branches: - - master - tags: - - v* - -jobs: - test: - uses: ./.github/workflows/base.yml - with: - docker-tag: lts diff --git a/.github/workflows/previous-lts.yml b/.github/workflows/previous-lts.yml deleted file mode 100644 index c7d16ac1c..000000000 --- a/.github/workflows/previous-lts.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Test Previous LTS - -on: - pull_request: - push: - branches: - - master - tags: - - v* - -jobs: - test: - uses: ./.github/workflows/base.yml - with: - docker-tag: previous-lts diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 146e3c967..d62a227f1 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -4,9 +4,9 @@ on: pull_request: push: branches: - - master + - master tags: - - v* + - v* jobs: vulnerability-scan: @@ -19,22 +19,22 @@ jobs: runs-on: ${{ matrix.os }} name: scan-vulnerabilities/${{ matrix.os }}/${{ matrix.framework }} steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x - - name: Scan for Vulnerabilities - shell: bash - run: | - dotnet nuget list source - dotnet restore - dotnet list package --vulnerable --include-transitive --framework ${{ matrix.framework }} | tee vulnerabilities.txt - ! cat vulnerabilities.txt | grep -q "has the following vulnerable packages" + - name: Checkout + uses: actions/checkout@v3 + - name: Install dotnet SDKs + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 6.0.x + 7.0.x + 8.0.x + - name: Scan for Vulnerabilities + shell: bash + run: | + dotnet nuget list source + dotnet restore + dotnet list package --vulnerable --include-transitive --framework ${{ matrix.framework }} | tee vulnerabilities.txt + ! cat vulnerabilities.txt | grep -q "has the following vulnerable packages" build-samples: timeout-minutes: 5 @@ -53,46 +53,46 @@ jobs: EVENTSTORE_RUN_PROJECTIONS: all EVENTSTORE_START_STANDARD_PROJECTIONS: true ports: - - 2113:2113 + - 2113:2113 options: --health-cmd "exit 0" steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 8.0.x - - name: Compile - shell: bash - run: | - dotnet build samples - - name: Run - shell: bash - run: | - find samples/ -type f -iname "*.csproj" -print0 | xargs -0L1 dotnet run --framework ${{ matrix.framework }} --project + - name: Checkout + uses: actions/checkout@v3 + - name: Install dotnet SDKs + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 8.0.x + - name: Compile + shell: bash + run: | + dotnet build samples + - name: Run + shell: bash + run: | + find samples/ -type f -iname "*.csproj" -print0 | xargs -0L1 dotnet run --framework ${{ matrix.framework }} --project generate-certificates: runs-on: ubuntu-latest steps: - - name: Checkout code - uses: actions/checkout@v2 - - name: Generate certificates - run: | - mkdir -p certs - docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-ca -out /tmp/ca - docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-node -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/node -ip-addresses 127.0.0.1 -dns-names localhost - docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-user -username admin -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/user-admin - docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-user -username invalid -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/user-invalid - - name: Set permissions on certificates - run: | - sudo chown -R $USER:$USER certs - sudo chmod -R 755 certs - - name: Upload certificates - uses: actions/upload-artifact@v2 - with: - name: certs - path: certs + - name: Checkout code + uses: actions/checkout@v2 + - name: Generate certificates + run: | + mkdir -p certs + docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-ca -out /tmp/ca + docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-node -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/node -ip-addresses 127.0.0.1 -dns-names localhost + docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-user -username admin -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/user-admin + docker run --rm --user root --volume "$PWD/certs:/tmp" docker.eventstore.com/eventstore-utils/es-gencert-cli:latest create-user -username invalid -ca-certificate /tmp/ca/ca.crt -ca-key /tmp/ca/ca.key -out /tmp/user-invalid + - name: Set permissions on certificates + run: | + sudo chown -R $USER:$USER certs + sudo chmod -R 755 certs + - name: Upload certificates + uses: actions/upload-artifact@v2 + with: + name: certs + path: certs test: needs: generate-certificates @@ -106,54 +106,54 @@ jobs: runs-on: ${{ matrix.os }} name: test/EventStore.Client/${{ matrix.os }}/${{ matrix.framework }} steps: - - name: Checkout - uses: actions/checkout@v3 - - shell: bash - run: | - git fetch --prune --unshallow - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x - - name: Compile - shell: bash - run: | - dotnet build --configuration ${{ matrix.configuration }} --framework ${{ matrix.framework }} src/EventStore.Client - - name: Download certificates - uses: actions/download-artifact@v2 - with: - name: certs - path: certs - - name: Import certificates (Linux) - if: runner.os == 'Linux' - shell: bash - run: | - sudo cp certs/ca/ca.crt /usr/local/share/ca-certificates/eventstore_ca.crt - sudo update-ca-certificates - - name: Import certificates (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - Import-Certificate -FilePath "certs\ca\ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root" - - name: Run Tests (Linux) - if: runner.os == 'Linux' - shell: bash - run: | - dotnet test --configuration ${{ matrix.configuration }} --blame \ - --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \ - --framework ${{ matrix.framework }} \ - test/EventStore.Client.Tests - - name: Run Tests (Windows) - if: runner.os == 'Windows' - shell: pwsh - run: | - dotnet test --configuration ${{ matrix.configuration }} --blame ` - --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" ` - --framework ${{ matrix.framework }} ` - test/EventStore.Client.Tests + - name: Checkout + uses: actions/checkout@v3 + - shell: bash + run: | + git fetch --prune --unshallow + - name: Install dotnet SDKs + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 6.0.x + 7.0.x + 8.0.x + - name: Compile + shell: bash + run: | + dotnet build --configuration ${{ matrix.configuration }} --framework ${{ matrix.framework }} src/EventStore.Client + - name: Download certificates + uses: actions/download-artifact@v2 + with: + name: certs + path: certs + - name: Import certificates (Linux) + if: runner.os == 'Linux' + shell: bash + run: | + sudo cp certs/ca/ca.crt /usr/local/share/ca-certificates/eventstore_ca.crt + sudo update-ca-certificates + - name: Import certificates (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + Import-Certificate -FilePath "certs\ca\ca.crt" -CertStoreLocation "Cert:\LocalMachine\Root" + - name: Run Tests (Linux) + if: runner.os == 'Linux' + shell: bash + run: | + dotnet test --configuration ${{ matrix.configuration }} --blame \ + --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \ + --framework ${{ matrix.framework }} \ + test/EventStore.Client.Tests + - name: Run Tests (Windows) + if: runner.os == 'Windows' + shell: pwsh + run: | + dotnet test --configuration ${{ matrix.configuration }} --blame ` + --logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" ` + --framework ${{ matrix.framework }} ` + test/EventStore.Client.Tests publish: timeout-minutes: 5 @@ -161,50 +161,50 @@ jobs: runs-on: ubuntu-latest name: publish steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Get Version - id: get_version - run: | - echo "branch=${GITHUB_REF:10}" >> $GITHUB_OUTPUT - dotnet nuget list source - dotnet tool restore - version=$(dotnet tool run minver -- --tag-prefix=v) - echo "version=${version}" >> $GITHUB_OUTPUT - - shell: bash - run: | - git fetch --prune --unshallow - - name: Install dotnet SDKs - uses: actions/setup-dotnet@v3 - with: - dotnet-version: | - 6.0.x - 7.0.x - 8.0.x - - name: Dotnet Pack - shell: bash - run: | - mkdir -p packages - dotnet pack /p:Version=${{ steps.get_version.outputs.version }} --configuration=Release \ - /p:PublishDir=./packages \ - /p:NoWarn=NU5105 \ - /p:RepositoryUrl=https://github.com/EventStore/EventStore-Client-Dotnet \ - /p:RepositoryType=git - - name: Publish Artifacts - uses: actions/upload-artifact@v1 - with: - path: packages - name: nuget-packages - - name: Dotnet Push to Github Packages - shell: bash - if: github.event_name == 'push' - run: | - dotnet tool restore - find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.github_token }} --source https://nuget.pkg.github.com/EventStore/index.json --skip-duplicate - - name: Dotnet Push to Nuget.org - shell: bash - if: contains(steps.get_version.outputs.branch, 'v') - run: | - dotnet nuget list source - dotnet tool restore - find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.nuget_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate + - name: Checkout + uses: actions/checkout@v3 + - name: Get Version + id: get_version + run: | + echo "branch=${GITHUB_REF:10}" >> $GITHUB_OUTPUT + dotnet nuget list source + dotnet tool restore + version=$(dotnet tool run minver -- --tag-prefix=v) + echo "version=${version}" >> $GITHUB_OUTPUT + - shell: bash + run: | + git fetch --prune --unshallow + - name: Install dotnet SDKs + uses: actions/setup-dotnet@v3 + with: + dotnet-version: | + 6.0.x + 7.0.x + 8.0.x + - name: Dotnet Pack + shell: bash + run: | + mkdir -p packages + dotnet pack /p:Version=${{ steps.get_version.outputs.version }} --configuration=Release \ + /p:PublishDir=./packages \ + /p:NoWarn=NU5105 \ + /p:RepositoryUrl=https://github.com/EventStore/EventStore-Client-Dotnet \ + /p:RepositoryType=git + - name: Publish Artifacts + uses: actions/upload-artifact@v1 + with: + path: packages + name: nuget-packages + - name: Dotnet Push to Github Packages + shell: bash + if: github.event_name == 'push' + run: | + dotnet tool restore + find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.github_token }} --source https://nuget.pkg.github.com/EventStore/index.json --skip-duplicate + - name: Dotnet Push to Nuget.org + shell: bash + if: contains(steps.get_version.outputs.branch, 'v') + run: | + dotnet nuget list source + dotnet tool restore + find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.nuget_key }} --source https://api.nuget.org/v3/index.json --skip-duplicate diff --git a/.github/workflows/pull-request-check.yml b/.github/workflows/pull-request-check.yml index e25a8c544..17d1a4561 100644 --- a/.github/workflows/pull-request-check.yml +++ b/.github/workflows/pull-request-check.yml @@ -2,22 +2,22 @@ name: Pull Request check on: pull_request: paths-ignore: - - "test/**" - - "generators/**" - - "samples/**" - - "**.md" - - "gencert.sh" - - ".github/**" - - ".gitignore" - - ".gitattributes" - - ".editorconfig" - types: [opened, edited] + - "test/**" + - "generators/**" + - "samples/**" + - "**.md" + - "gencert.sh" + - ".github/**" + - ".gitignore" + - ".gitattributes" + - ".editorconfig" + types: [ opened, edited ] jobs: checkPullRequest: name: Pull Request check runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v3 - - name: Check pull requests - uses: EventStore/Automations/pr-check@master + - name: Checkout + uses: actions/checkout@v3 + - name: Check pull requests + uses: EventStore/Automations/pr-check@master