Skip to content

feat: elaborate TODOs (#227) #773

feat: elaborate TODOs (#227)

feat: elaborate TODOs (#227) #773

name: Ref Impl
# This workflow is triggered when there is a push or a pull request to the master branch.
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
jobs:
test-server:
runs-on: ubuntu-latest
steps:
# Checks out this project ie OpenActive.Server.NET
- name: Checkout
uses: actions/checkout@v2
# Uses the actions/setup-dotnet action to set up the .NET Core runtime environment with version 3.1.419
- name: Setup .NET Core 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
# Runs the `dotnet build` command to build the "OpenActive.Server.NET.Tests" project and its dependencies. It uses
# the `--configuration Release` flag to build in release mode, which results in optimized code generation
- name: Build OpenActive.Server.NET.Tests and dependencies
run: dotnet build ./OpenActive.Server.NET.Tests/OpenActive.Server.NET.Tests.csproj --configuration Release
# Runs the tests for the "OpenActive.Server.NET.Tests" project using the `dotnet test` command. It runs the unit
# tests and uses the `--configuration Release` flag for release mode, `--no-build` to skip rebuilding the project
# since it was built in the previous step, and `--verbosity normal` for the level of detail in the test output
- name: Run OpenActive.Server.NET.Tests
run: dotnet test ./OpenActive.Server.NET.Tests/OpenActive.Server.NET.Tests.csproj --configuration Release --no-build --verbosity normal
test-fake-database:
runs-on: ubuntu-latest
steps:
# Checks out this project ie OpenActive.Server.NET
- name: Checkout
uses: actions/checkout@v2
# Uses the actions/setup-dotnet action to set up the .NET Core runtime environment with version 3.1.419
- name: Setup .NET Core 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
# Runs the `dotnet build` command to build the "OpenActive.FakeDatabase.NET.Tests" project and its dependencies.
# It uses the `--configuration Release` flag to build in release mode, which results in optimized code generation
- name: Build OpenActive.FakeDatabase.NET.Tests
run: dotnet build ./Fakes/OpenActive.FakeDatabase.NET.Tests/OpenActive.FakeDatabase.NET.Tests.csproj --configuration Release
# Runs the tests for the "OpenActive.FakeDatabase.NET.Tests" project using the `dotnet test` command. It runs the
# unit tests and uses the `--configuration Release` flag for release mode, `--no-build` to skip rebuilding the
# project since it was built in the previous step, and `--verbosity normal` for the level of detail in the test
# output
- name: Run OpenActive.FakeDatabase.NET.Tests
run: dotnet test ./Fakes/OpenActive.FakeDatabase.NET.Tests/OpenActive.FakeDatabase.NET.Tests.csproj --configuration Release --no-build --verbosity normal
core:
# Specifies that this job depends on the successful completion of two other jobs: "test-server" and "test-fake-database"
needs:
- test-server
- test-fake-database
runs-on: ubuntu-latest
# Defines a matrix strategy for running tests with different combinations of parameters, allowing for parallel test
# runs with various configurations. For more information about these parameters, see `.github/README.md` in Test
# Suite
strategy:
fail-fast: false
matrix:
mode: ['random', 'controlled']
profile: ['all-features', 'single-seller', 'no-payment-reconciliation', 'no-auth', 'no-tax-calculation', 'prepayment-always-required', 'facilityuse-has-slots']
steps:
# checks out the `OpenActive.Server.NET` project's code repository and places it in a directory named "server"
- name: Checkout OpenActive.Server.NET
uses: actions/checkout@v2
with:
path: server
# checks if the workflow is triggered by a branch starting with `coverage/`. If so, it sets an output variable named
# `mirror_ref` with the branch name, allowing later steps to use it
- name: Use matching coverage/* branch ${{ github.head_ref }} in OpenActive Test Suite
if: ${{ startsWith(github.head_ref, 'coverage/') }}
id: refs
run: echo "::set-output name=mirror_ref::${{ github.head_ref }}"
# checks out Test Suite and places it in a directory named "tests." The branch used for checkout is determined by
# the `mirror_ref` set in the previous step
- name: Checkout OpenActive Test Suite ${{ steps.refs.outputs.mirror_ref }}
uses: actions/checkout@v2
with:
repository: openactive/openactive-test-suite
ref: ${{ steps.refs.outputs.mirror_ref }}
path: tests
# sets up the .NET Core SDK version 3.1.419 in the job's environment
- name: Setup .NET Core SDK 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
- name: Setup Node.js 18.17.1
uses: actions/setup-node@v1
with:
node-version: 18.17.1
# runs `dotnet restore` to install the dependencies for the "OpenActive.Server.NET" project. It is conditional and
# depends on the "profile" value not being 'no-auth' or 'single-seller'
- name: Install OpenActive.Server.NET dependencies
if: ${{ matrix.profile != 'no-auth' && matrix.profile != 'single-seller' }}
run: dotnet restore ./server/
# builds `BookingSystem.AspNetCore.IdentityServer` if the `profile` is not `no-auth` or `single-seller` as it is not
# needed for these profiles
- name: Build .NET Core Authentication Authority Reference Implementation
if: ${{ matrix.profile != 'no-auth' && matrix.profile != 'single-seller' }}
run: dotnet build ./server/Examples/BookingSystem.AspNetCore.IdentityServer/BookingSystem.AspNetCore.IdentityServer.csproj --configuration Release --no-restore
# starts IdentityServer if the profiles are relevant (see above)
- name: Start .NET Core Authentication Authority Reference Implementation
if: ${{ matrix.profile != 'no-auth' && matrix.profile != 'single-seller' }}
run: |
dotnet run --no-launch-profile --project ./server/Examples/BookingSystem.AspNetCore.IdentityServer/BookingSystem.AspNetCore.IdentityServer.csproj --configuration Release --no-build &
# builds Reference Implementation booking server
- name: Build .NET Core Booking Server Reference Implementation
run: dotnet build ./server/Examples/BookingSystem.AspNetCore/BookingSystem.AspNetCore.csproj --configuration Release ${{ matrix.profile != 'no-auth' && matrix.profile != 'single-seller' && '--no-restore' || '' }}
# starts Reference Implementation booking server
- name: Start .NET Core Booking Server Reference Implementation
run: |
dotnet run --no-launch-profile --project ./server/Examples/BookingSystem.AspNetCore/BookingSystem.AspNetCore.csproj --configuration Release --no-build &
env:
ASPNETCORE_ENVIRONMENT: ${{ matrix.profile }}
# runs `npm install` to install the JavaScript dependencies for Test Suite, which is located in the "tests"
# directory
- name: Install OpenActive Test Suite
run: npm install
working-directory: tests
# runs the OpenActive integration tests using `npm start` and specifies various environment variables based on the
# `mode` and `profile` matrix variables specified above
- name: Run OpenActive Integration Tests in ${{ matrix.mode }} mode
run: npm start
env:
FORCE_COLOR: 1
NODE_CONFIG: |
{"broker": {"outputPath": "../../output/"}, "integrationTests": { "outputPath": "../../output/", "conformanceCertificatePath": "../../conformance/examples/${{ matrix.profile }}/${{ matrix.mode }}/", "useRandomOpportunities": ${{ matrix.mode == 'random' }}, "conformanceCertificateId": "https://certificates.reference-implementation.openactive.io/examples/${{ matrix.profile }}/${{ matrix.mode }}/" }}
NODE_ENV: .example.${{ matrix.profile }}
NODE_APP_INSTANCE: ci
working-directory: tests
# uploads the test output as an artifact, which can be used for reference or debugging later
- name: Upload test output for ${{ matrix.mode }} mode as artifact
uses: actions/upload-artifact@v2
if: ${{ success() || failure() }}
with:
name: core.${{ matrix.mode }}.${{ matrix.profile }}
path: ./tests/output/
# deploys a conformance certificate to Azure Blob Storage, but it is conditional and only runs when the GitHub
# branch is `master` and the `profile` is 'all-features' and the `mode` is 'controlled'. For more information on
# Coformance Certificates, see `packages/openactive-integration-tests/test/certification/README.md` in Test Suite
- name: Deploy conformance certificate to Azure Blob Storage (master branch for 'all-features' profile in controlled mode only)
uses: bacongobbler/[email protected]
if: ${{ github.ref == 'refs/heads/master' }}
with:
source_dir: ./tests/conformance/
container_name: '$web'
connection_string: ${{ secrets.CONFORMANCE_CERTIFICATE_BLOB_STORAGE_CONNECTION_STRING }}
sync: false
# This job is very similar to the `core` job explained above. However because it runs on .NET Framework as opposed to
# .NET Core, there are some differences. Due to the similarity, only the differences are outlined below.
framework:
needs:
- test-server
- test-fake-database
# runs on an Windows 2019 virtual machine, not an Ubuntu machine
runs-on: windows-2019
strategy:
fail-fast: false
matrix:
mode: ['random', 'controlled']
profile: ['no-auth']
steps:
- name: Checkout OpenActive.Server.NET
uses: actions/checkout@v2
with:
path: server
- name: Use matching coverage/* branch ${{ github.head_ref }} in OpenActive Test Suite
if: ${{ startsWith(github.head_ref, 'coverage/') }}
id: refs
run: echo "::set-output name=mirror_ref::${{ github.head_ref }}"
- name: Checkout OpenActive Test Suite ${{ steps.refs.outputs.mirror_ref }}
uses: actions/checkout@v2
with:
repository: openactive/openactive-test-suite
ref: ${{ steps.refs.outputs.mirror_ref }}
path: tests
- name: Setup Node.js 18.17.1
uses: actions/setup-node@v1
with:
node-version: 18.17.1
# Building and deploying Framework is done using `msbuild` as opposed to `dotnet build`/`dotnet run`. It is started
# using IIS Express
- name: Setup MSBuild path
uses: microsoft/[email protected]
- name: Setup NuGet
uses: NuGet/[email protected]
- name: Install OpenActive.Server.NET dependencies
run: nuget restore .\server\
- name: Build .NET Framework Reference Implementation
run: msbuild .\server\Examples\BookingSystem.AspNetFramework\BookingSystem.AspNetFramework.csproj /p:Configuration=Release
- name: Deploy .NET Framework Reference Implementation to folder
run: msbuild .\server\Examples\BookingSystem.AspNetFramework\BookingSystem.AspNetFramework.csproj /p:Configuration=Release /p:DeployOnBuild=true /t:WebPublish /p:WebPublishMethod=FileSystem /p:publishUrl=${{ runner.temp }}\deploy\ /p:PackageAsSingleFile=false
- name: Start .NET Framework Reference Implementation from folder (using IIS Express)
run: |
Start-Process -FilePath "$Env:Programfiles\IIS Express\iisexpress.exe" -ArgumentList "/path:${{ runner.temp }}\deploy\ /port:5000"
- name: Install OpenActive Test Suite
run: npm install
working-directory: tests
- name: Run OpenActive Integration Tests in ${{ matrix.mode }} mode
run: npm start
env:
FORCE_COLOR: 1
NODE_CONFIG: |
{"broker": {"outputPath": "../../output/"}, "integrationTests": {"outputPath": "../../output/", "useRandomOpportunities": ${{ matrix.mode == 'random' }}, "conformanceCertificateId": "https://openactive.io/OpenActive.Server.NET/certification/"}}
NODE_ENV: .example.${{ matrix.profile }}
NODE_APP_INSTANCE: framework
working-directory: tests
- name: Upload test output for ${{ matrix.mode }} mode as artifact
uses: actions/upload-artifact@v2
if: ${{ success() || failure() }}
with:
name: framework.${{ matrix.mode }}.${{ matrix.profile }}
path: ./tests/output/
# This job uses many of the steps and setup used above. Because of this, only important or different parts have been
# highlighted.
deploy-reference-implementation:
# Master branch only
if: ${{ github.ref == 'refs/heads/master' }}
needs:
- core
runs-on: ubuntu-latest
steps:
# Checkout the repo
- uses: actions/checkout@master
# Setup .NET Core SDK
- name: Setup .NET Core SDK 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
# Run dotnet build and publish
- name: Install OpenActive.Server.NET dependencies
run: dotnet restore
- name: Build OpenActive.Server.NET Booking Server Reference Implementation
run: dotnet build ./Examples/BookingSystem.AspNetCore/BookingSystem.AspNetCore.csproj --configuration Release --no-restore
- name: Publish OpenActive.Server.NET Booking Server Reference Implementation
run: dotnet publish ./Examples/BookingSystem.AspNetCore/BookingSystem.AspNetCore.csproj --configuration Release --no-build --output './web-app-package/BookingSystem.AspNetCore'
- name: Build OpenActive.Server.NET Authentication Authority Reference Implementation
run: dotnet build ./Examples/BookingSystem.AspNetCore.IdentityServer/BookingSystem.AspNetCore.IdentityServer.csproj --configuration Release --no-restore
- name: Publish OpenActive.Server.NET Authentication Authority Reference Implementation
run: dotnet publish ./Examples/BookingSystem.AspNetCore.IdentityServer/BookingSystem.AspNetCore.IdentityServer.csproj --configuration Release --no-build --output './web-app-package/BookingSystem.AspNetCore.IdentityServer'
# Deploy to Azure Web apps
# deploys the `master` branch of Reference Implementation Booking Server and Identity
# Server Reference Implementation to two Azure webapps
- name: 'Deploy Booking Server Reference Implementation using publish profile credentials'
uses: azure/webapps-deploy@v2
with:
app-name: openactive-reference-implementation
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: './web-app-package/BookingSystem.AspNetCore'
- name: 'Deploy Authentication Authority Reference Implementation using publish profile credentials'
uses: azure/webapps-deploy@v2
with:
app-name: openactive-reference-implementation-auth
publish-profile: ${{ secrets.AZURE_WEBAPP_AUTH_PUBLISH_PROFILE }} # Define secret variable in repository settings as per action documentation
package: './web-app-package/BookingSystem.AspNetCore.IdentityServer'
# This job uses many of the steps and setup used above. Because of this, only important or different parts have been
# highlighted.
publish-server:
# Master branch only
if: ${{ github.ref == 'refs/heads/master' }}
needs:
- core
- framework
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Install Nerdbank.GitVersioning
run: cp Directory.Build.props.template Directory.Build.props
- name: Get current version
uses: dotnet/nbgv@master
id: nbgv
- name: Setup .NET Core 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build ./OpenActive.Server.NET/OpenActive.Server.NET.csproj --configuration Release --no-restore
- name: Test
run: dotnet test ./OpenActive.Server.NET.Tests/OpenActive.Server.NET.Tests.csproj --configuration Release --no-restore --verbosity normal
- name: Pack
run: dotnet pack ./OpenActive.Server.NET/OpenActive.Server.NET.csproj --configuration Release --include-source --no-build -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
# publishes the `master` branch of OpenActive.Server.NET to Nuget. It then creates a release in the GitHub
# repository
- name: Push to Nuget
if: "! contains(toJSON(github.event.commits.*.message), '[no-release]')"
run: dotnet nuget push "./OpenActive.Server.NET/**/*.nupkg" -k ${{secrets.NUGET_API_KEY}} --skip-duplicate -s https://api.nuget.org/v3/index.json
- name: Create Release
if: "! contains(toJSON(github.event.commits.*.message), '[no-release]')"
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.nbgv.outputs.SimpleVersion }}
release_name: Release ${{ steps.nbgv.outputs.SimpleVersion }}
body: |
This release contains minor amendments based on updates to the [OpenActive Vocabulary](https://openactive.io/ns/) (codified by the [Data Models](https://github.com/openactive/data-models)), and the latest version of the [Dataset Site Template](https://github.com/openactive/dataset-site-template).
Published to Nuget: [OpenActive.Server.NET](https://www.nuget.org/packages/OpenActive.Server.NET/${{ steps.nbgv.outputs.SimpleVersion }}) and [OpenActive.FakeDatabase.NET](https://www.nuget.org/packages/OpenActive.FakeDatabase.NET/${{ steps.nbgv.outputs.SimpleVersion }}).
draft: false
prerelease: false
publish-fake-database:
# Master branch only
if: ${{ github.ref == 'refs/heads/master' }}
needs:
- core
- framework
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work.
- name: Install Nerdbank.GitVersioning
run: cp Directory.Build.props.template Directory.Build.props
- name: Get current version
uses: dotnet/nbgv@master
id: nbgv
- name: Setup .NET Core 3.1.419
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.419
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build ./Fakes/OpenActive.FakeDatabase.NET/OpenActive.FakeDatabase.NET.csproj --configuration Release --no-restore
- name: Test
run: dotnet test ./Fakes/OpenActive.FakeDatabase.NET.Tests/OpenActive.FakeDatabase.NET.Tests.csproj --configuration Release --no-restore --verbosity normal
- name: Pack
run: dotnet pack ./Fakes/OpenActive.FakeDatabase.NET/OpenActive.FakeDatabase.NET.csproj --configuration Release --include-source --no-build -p:IncludeSymbols=true -p:SymbolPackageFormat=snupkg
- name: Push to Nuget
if: "! contains(toJSON(github.event.commits.*.message), '[no-release]')"
run: dotnet nuget push "./Fakes/OpenActive.FakeDatabase.NET/**/*.nupkg" -k ${{secrets.NUGET_API_KEY}} --skip-duplicate -s https://api.nuget.org/v3/index.json