diff --git a/.github/workflows/directory.yml b/.github/workflows/directory.yml
new file mode 100644
index 000000000..88639dd00
--- /dev/null
+++ b/.github/workflows/directory.yml
@@ -0,0 +1,72 @@
+name: Directory API CI/CD
+
+on:
+ push:
+ branches:
+ - main
+ - aspire # TODO: rm when merging aspire to main
+ paths:
+ - '.github/workflows/directory.yml'
+ - 'services/Directory/**'
+ - 'services/FilterLists.ServiceDefaults/**'
+ # TODO: uncomment when merging aspire to main
+ # pull_request:
+ # branches:
+ # - main
+ # paths:
+ # - '.github/workflows/directory.yml'
+ # - 'services/Directory/**'
+ # - 'services/FilterLists.ServiceDefaults/**'
+
+env:
+ CONTAINER_REGISTRY: ghcr.io
+ CONTAINER_REPOSITORY: collinbarrett/filterlists-directory-api
+ CONTAINER_IMAGE_TAG_UNIQUE: ${{ github.run_id }}
+ CONTAINER_IMAGE_TAG_STABLE: latest-aspire # TODO: drop '-aspire' when merging aspire to main
+ AZURE_WEBAPP_NAME: app-filterlists-directory-prod
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ permissions:
+ packages: write
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Login to Container Registry
+ uses: docker/login-action@v3
+ with:
+ registry: ${{ env.CONTAINER_REGISTRY }}
+ username: ${{ github.actor }}
+ password: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build
+ run: dotnet build -c Release
+ working-directory: ./services/Directory/FilterLists.Directory.Api
+
+ - name: Publish & Push
+ if: github.event_name == 'push'
+ run: >
+ dotnet publish --sc \
+ -p:PublishProfile=DefaultContainer \
+ -p:ContainerRegistry=${{ env.CONTAINER_REGISTRY }} \
+ -p:ContainerRepository=${{ env.CONTAINER_REPOSITORY }} \
+ -p:ContainerImageTags='"${{ env.CONTAINER_IMAGE_TAG_UNIQUE }};${{ env.CONTAINER_IMAGE_TAG_STABLE }}"'
+ working-directory: ./services/Directory/FilterLists.Directory.Api
+
+ deploy:
+ runs-on: ubuntu-latest
+ needs: build
+ if: github.event_name == 'push'
+ environment:
+ name: production
+ url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}/swagger
+ steps:
+ - name: Deploy to Azure Web App
+ id: deploy-to-webapp
+ uses: azure/webapps-deploy@v3
+ with:
+ app-name: ${{ env.AZURE_WEBAPP_NAME }}
+ publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE_APP_FILTERLISTS_DIRECTORY_PROD }}
+ images: ${{ env.CONTAINER_REGISTRY }}/${{ env.CONTAINER_REPOSITORY }}:${{ env.CONTAINER_IMAGE_TAG_UNIQUE }}
\ No newline at end of file
diff --git a/services/Directory/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj b/services/Directory/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
index 4bd34fb34..31f790ec9 100644
--- a/services/Directory/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
+++ b/services/Directory/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
@@ -7,6 +7,12 @@
Recommended
+
+ true
+ mcr.microsoft.com/dotnet/runtime-deps:8.0-jammy-chiseled-extra
+ linux-x64
+
+
@@ -17,4 +23,10 @@
+
+
+
+
+
+