Skip to content

.github/workflows/publish.yml #866

.github/workflows/publish.yml

.github/workflows/publish.yml #866

Workflow file for this run

name: Publish
on:
pull_request:
push:
branches:
- master
tags:
- v*
workflow_dispatch:
inputs:
ref:
description: "Git reference (branch, tag, or commit SHA)"
required: true
default: "master"
dry_run:
description: "Dry run"
required: true
type: boolean
default: true
version:
description: "Version number"
required: false
default: ""
jobs:
vulnerability-scan:
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
framework: [net8.0, net9.0]
os: [ubuntu-latest, windows-latest]
runs-on: ${{ matrix.os }}
name: scan-vulnerabilities/${{ matrix.os }}/${{ matrix.framework }}
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref || github.ref }}
- name: Install dotnet SDKs
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
8.0.x
9.0.x
- name: Scan for Vulnerabilities
shell: bash
run: |
dotnet nuget list source
dotnet restore ./src/KurrentDB.Client/KurrentDB.Client.csproj
dotnet restore ./test/KurrentDB.Client.Tests/KurrentDB.Client.Tests.csproj
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
name: build-samples/${{ matrix.framework }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
framework: [net8.0, net9.0]
services:
esdb:
image: docker.kurrent.io/eventstore/eventstoredb-ee:lts
env:
EVENTSTORE_INSECURE: true
EVENTSTORE_MEM_DB: false
EVENTSTORE_RUN_PROJECTIONS: all
EVENTSTORE_START_STANDARD_PROJECTIONS: true
ports:
- 2113:2113
options: --health-cmd "exit 0"
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref || github.ref }}
- name: Install dotnet SDKs
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
8.0.x
9.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@v4
- name: Generate certificates
run: |
mkdir -p certs
docker run --rm --user root --volume "$PWD/certs:/tmp" docker.kurrent.io/eventstore-utils/es-gencert-cli:latest create-ca -out /tmp/ca
docker run --rm --user root --volume "$PWD/certs:/tmp" docker.kurrent.io/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.kurrent.io/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.kurrent.io/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@v4
with:
name: certs
path: certs
test:
needs: generate-certificates
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
framework: [net8.0, net9.0]
os: [ubuntu-latest]
configuration: [release]
test:
[
Streams,
PersistentSubscriptions,
Operations,
ProjectionManagement,
UserManagement,
Security,
Misc,
]
runs-on: ${{ matrix.os }}
name: ${{ matrix.test }} (${{ matrix.os }}, ${{ matrix.framework }})
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref || github.ref }}
- name: Login to Cloudsmith
uses: docker/login-action@v3
with:
registry: docker.kurrent.io
username: ${{ secrets.CLOUDSMITH_CICD_USER }}
password: ${{ secrets.CLOUDSMITH_CICD_TOKEN }}
- name: Pull EventStore Image
shell: bash
run: |
docker pull docker.kurrent.io/eventstore-ce/eventstoredb-ce:ci
- shell: bash
run: |
git fetch --prune --unshallow
- name: Install dotnet SDKs
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
8.0.x
9.0.x
- name: Compile
shell: bash
run: |
dotnet build --configuration ${{ matrix.configuration }} --framework ${{ matrix.framework }} src/KurrentDB.Client
- name: Download certificates
uses: actions/download-artifact@v4
with:
name: certs
path: certs
- name: Run Tests (Linux)
if: runner.os == 'Linux'
shell: bash
env:
ES_DOCKER_TAG: ci
ES_DOCKER_REGISTRY: docker.kurrent.io/eventstore-ce/eventstoredb-ce
run: |
dotnet test --configuration ${{ matrix.configuration }} --blame \
--logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" \
--framework ${{ matrix.framework }} \
--filter "Category=Target:${{ matrix.test }}" \
test/KurrentDB.Client.Tests
- name: Run Tests (Windows)
if: runner.os == 'Windows'
shell: pwsh
env:
ES_DOCKER_TAG: ci
ES_DOCKER_REGISTRY: docker.kurrent.io/eventstore-ce/eventstoredb-ce
run: |
dotnet test --configuration ${{ matrix.configuration }} --blame `
--logger:"GitHubActions;report-warnings=false" --logger:"console;verbosity=normal" `
--framework ${{ matrix.framework }} `
--filter "Category=Target:${{ matrix.test }}" `
test/KurrentDB.Client.Tests
publish:
timeout-minutes: 5
needs: [vulnerability-scan, test, build-samples]
runs-on: ubuntu-latest
name: publish
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.event.inputs.ref || github.ref }}
fetch-depth: 0
- name: Get Version
id: get_version
run: |
echo "branch=${GITHUB_REF:10}" >> $GITHUB_OUTPUT
dotnet nuget list source
dotnet tool restore
if [ -n "${{ github.event.inputs.version }}" ]; then
version="${{ github.event.inputs.version }}"
else
version=$(dotnet tool run minver -- --tag-prefix=v)
fi
echo "version=${version}" >> $GITHUB_OUTPUT
- name: Install dotnet SDKs
uses: actions/setup-dotnet@v3
with:
dotnet-version: |
8.0.x
9.0.x
- name: Dotnet Pack
shell: bash
run: |
echo "version=${{ steps.get_version.outputs.version }}"
mkdir -p packages
extra_minver_flag=""
if [ -n "${{ github.event.inputs.version }}" ]; then
extra_minver_flag="/p:MinVerSkip=true"
fi
dotnet pack /p:Version=${{ steps.get_version.outputs.version }} $extra_minver_flag \
--configuration=Release \
/p:PublishDir=./packages \
/p:NoWarn=NU5105 \
/p:RepositoryUrl=https://github.com/kurrent-io/EventStore-Client-Dotnet \
/p:RepositoryType=git
- name: Publish Artifacts
uses: actions/upload-artifact@v4
with:
path: packages
name: nuget-packages
- name: Dotnet Push to Github Packages
shell: bash
if: github.event.inputs.dry_run != 'true'
run: |
dotnet tool restore
find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.GITHUB_TOKEN }} --source https://nuget.pkg.github.com/kurrent-io/index.json --skip-duplicate
- name: Dotnet Push to Nuget.org
shell: bash
if: github.event.inputs.dry_run != 'true'
run: |
dotnet nuget list source
dotnet tool restore
find . -name "*.nupkg" | xargs -n1 dotnet nuget push --api-key=${{ secrets.KURRENT_NUGET_KEY }} --source https://api.nuget.org/v3/index.json --skip-duplicate