diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 0000000..2486764 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,88 @@ +name: Docker Build and Push + +on: + workflow_dispatch: + inputs: + environment: + description: 'Environment to deploy to' + required: true + type: choice + options: + - dev + - staging + tag_suffix: + description: 'Additional tag suffix (optional)' + required: false + type: string + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Generate tags + id: tags + run: | + BRANCH_NAME=${GITHUB_REF#refs/heads/} + SHA_SHORT=$(git rev-parse --short HEAD) + TIMESTAMP=$(date +%Y%m%d-%H%M%S) + + # Convert repository name to lowercase + REPO_NAME=$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]') + + # Set default environment for push events + if [ "${{ github.event_name }}" = "push" ]; then + ENV="dev" + else + ENV="${{ github.event.inputs.environment }}" + fi + + # Base tags + TAGS="${{ env.REGISTRY }}/${REPO_NAME}:${ENV}" + TAGS="${TAGS},${{ env.REGISTRY }}/${REPO_NAME}:${BRANCH_NAME}-${SHA_SHORT}" + TAGS="${TAGS},${{ env.REGISTRY }}/${REPO_NAME}:${BRANCH_NAME}-${ENV}" + + # Add timestamp tag + TAGS="${TAGS},${{ env.REGISTRY }}/${REPO_NAME}:${BRANCH_NAME}-${TIMESTAMP}" + + # Add custom suffix if provided (only for workflow_dispatch) + if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ github.event.inputs.tag_suffix }}" ]; then + TAGS="${TAGS},${{ env.REGISTRY }}/${REPO_NAME}:${ENV}-${{ github.event.inputs.tag_suffix }}" + fi + + echo "tags=${TAGS}" >> $GITHUB_OUTPUT + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + file: Dockerfile.prod + push: true + tags: ${{ steps.tags.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Print image tags + run: | + echo "Image was built and pushed with the following tags:" + echo "${{ steps.tags.outputs.tags }}" | tr ',' '\n' diff --git a/src/app/case-studies/la-county/page.tsx b/src/app/case-studies/la-county/page.tsx new file mode 100644 index 0000000..9ee7927 --- /dev/null +++ b/src/app/case-studies/la-county/page.tsx @@ -0,0 +1,143 @@ +import Link from 'next/link'; +import { Link as ExternalLink } from '@trussworks/react-uswds'; +import './styles.scss'; + +export default function LaCountyCaseStudy() { + return ( +
+ + Timely access to electronic case reporting (eCR) data is + critical for public health departments to respond swiftly to + disease outbreaks, especially during a public health emergency. + Unfortunately, not all public health jurisdictions can + effectively manage the flow of incoming eCR data. Due to + technical limitations with their existing disease surveillance + system, the Los Angeles County (LAC) Department of Public Health + faced challenges with processing eCR files, leaving this rich + source of data largely inaccessible to their disease + surveillance teams. + + + Because LAC's disease surveillance system couldn't process eCR + data fields, they set up a separate, patchwork data workflow to + collect eCR data. As a result, epidemiologists at LAC also had + to spend a considerable amount of time manually cleaning data + after it was processed. To efficiently monitor and respond to + disease outbreaks, LAC also needed to improve the overall + quality of the data processed through its disease surveillance + infrastructure. Better, more reliable data reduces the need for + manual cleaning and makes downstream analysis and case + investigation less onerous for epidemiologists and other public + health staff. + +
++ The DIBBs team worked with LAC to develop and deploy a + cutting-edge, modular data pipeline to automatically process and + enrich COVID-19 eCR files. This open-source, cloud-based + pipeline — composed of modular software components called Data + Integration Building Blocks (DIBBs) — helps significantly reduce + the time it takes for LAC's disease surveillance teams to + receive and act upon public health data, while also improving + the quality of that data. Over the course of the year-long + pilot, the DIBBs team: +
++ We are currently commencing pilots with jurisdictions to test + the eCR Viewer in a production data environment and further + validate the tool's downstream public health impact. Our aim is + to scale the eCR Viewer with a wide range of jurisdictions to + turn eCR into the go-to data source for case ascertainment and + investigation. +
++ Following the pilot, LAC now has access to an automated feed of + analysis-ready eCR data with fields relevant to downstream disease + teams. LAC plans to continue to leverage the DIBBs pipeline + infrastructure to give additional disease teams access to + processed eCR data, including the HIV and STD prevention team and + the Community Outbreak Team (focused on viral respiratory + pathogens). Through the LAC pilot, the DIBBs team gained insights + on how to use and adapt our modular, open-source solutions to + solve data challenges for multiple disease surveillance systems + across public health jurisdictions. +
+