diff --git a/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md similarity index 100% rename from CODE_OF_CONDUCT.md rename to .github/CODE_OF_CONDUCT.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..ca5e099 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,135 @@ +# Contributing + +A big welcome and thank you for considering contributing to this project. + +This project is a community effort and lives off your contributions, be it in +the form of bug reports, feature requests, discussions, or fixes and other +code changes. + +Reading and following these guidelines will help us make the contribution +process easy and effective for everyone involved. It also communicates that you +agree to respect the time of the developers managing and developing these open +source projects. In return, we will reciprocate that respect by addressing your +issue, assessing changes, and helping you finalize your pull requests. + +## Quicklinks + +- [Code of Conduct](#code-of-conduct) +- [Getting Started](#getting-started) + - [Issues](#issues) + - [Pull Requests](#pull-requests) + - [Setup Development Environment](#setup-development-environment) + - [Testing](#testing) +- [Release Procedure](#release-procedure) +- [Getting Help](#getting-help) + +## Code of Conduct + +We take our open source community seriously and hold ourselves and other +contributors to high standards of communication. By participating and +contributing to this project, you agree to uphold our [Code of Conduct]. + +## Getting Started + +Contributions are made to this repo via Issues and Pull Requests (PRs). A few +general guidelines that cover both: + +- Search for existing Issues and PRs before creating your own. +- We work hard to makes sure issues are handled in a timely manner but, + depending on the impact, it could take a while to investigate the root cause. + A friendly ping in the comment thread to the submitter or a contributor can + help draw attention if your issue is blocking. + +### Issues + +Issues should be used to report problems with this project, request a new +feature, or to discuss potential changes before a PR is created. When you +create a new Issue, a template will be loaded that will guide you through +collecting and providing the information we need to investigate. + +If you find an Issue that addresses the problem you're having, please add your +own reproduction information to the existing issue rather than creating a new +one. Adding a [reaction] can also help be indicating to our maintainers that a +particular problem is affecting more than just the reporter. + +### Pull Requests + +PRs to our repositories are always welcome and can be a quick way to get your +fix or improvement slated for the next release. In general, PRs should: + +- Only fix/add the functionality in question **OR** address wide-spread + whitespace/style issues, not both. +- Add unit or integration tests for fixed or changed functionality + (if a test suite already exists). +- Address a single concern in the least number of changed lines as possible. +- Include documentation in the repo or on our [docs site]. +- Be accompanied by a complete Pull Request template (loaded automatically + when a PR is created). + +For changes that address core functionality or would require breaking changes +(e.g. a major release), it's best to open an Issue to discuss your proposal +first. This is not required but can save time creating and reviewing changes. + +In general, we follow the [Forking Workflow]: + +1. Fork the repository to your own Github account +2. Clone the project to your machine +3. Create a branch locally with a succinct but descriptive name +4. Commit changes to the branch +5. Following any formatting and testing guidelines specific to this repo +6. Push changes to your fork +7. Open a PR in our repository and follow the PR template so that we can + efficiently review the changes. + +We recommend that you add this repository as an [upstream remote] to your local +git repository so that you can fetch the latest updates. + +On your local machine make sure you have the latest version of the `develop` +branch from this upstream repository: + + git checkout develop + git pull upstream develop + +### Setup Development Environment + +This project relies on Node tools and project-specific commands listed in the +file [package.json] to streamline the development and testing of this project. +The command below will install the required development tools. + + npm ci + +### Testing + +Please add tests for new code. These might include unit tests (to test specific +functionality of code that was added to support fixing the bug or feature), +integration tests (to test that the feature is usable - e.g., it should have +complete the expected behavior as reported in the feature request or bug +report), or both. + +Before submitting a PR, please check that the content of the branch that you +plan to submit passes with the tests defined for this project: + + npm run lint + npm run test + +## Release Procedure + +Maintainers are required to follow the procedure below when creating a new +release. + +TBA + +## Getting Help + +Join us on the [NLP Sandbox Discord server] and post your question to the +channel that best matches the topic of your request. + + + +[Code of Conduct]: CODE_OF_CONDUCT.md +[upstream remote]: https://help.github.com/en/articles/configuring-a-remote-for-a-fork +[reaction]: https://github.blog/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/ +[docs site]: https://nlpsandbox.io +[Forking Workflow]: https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow +[package.json]: ../package.json +[NLP Sandbox Discord server]: https://nlpsandbox.io/discord diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 9485ddf..4dd6365 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -6,37 +6,27 @@ updates: schedule: interval: "monthly" target-branch: "main" - reviewers: - - "nlpsandbox/maintainers" - package-ecosystem: "docker" directory: "/client" schedule: interval: "monthly" target-branch: "main" - reviewers: - - "nlpsandbox/maintainers" - package-ecosystem: "github-actions" directory: "/" schedule: interval: "monthly" target-branch: "develop" - reviewers: - - "nlpsandbox/maintainers" - package-ecosystem: "npm" directory: "/" schedule: interval: "monthly" target-branch: "main" - reviewers: - - "nlpsandbox/maintainers" - package-ecosystem: "npm" directory: "/client" schedule: interval: "monthly" target-branch: "main" - reviewers: - - "nlpsandbox/maintainers" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1509041..13d100c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,25 +15,10 @@ env: docker_repository: nlpsandbox/phi-deidentifier-app jobs: - build: - env: - working-directory: ./client - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Install modules - working-directory: ${{env.working-directory}} - run: npm ci - - name: Run ESLint - working-directory: ${{env.working-directory}} - run: npm run lint - docker: - # needs: [test] + configure: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - name: Prepare - id: prep + - name: Create configuration run: | DOCKER_IMAGE=${{ env.docker_repository }} VERSION=noop @@ -54,27 +39,75 @@ jobs: fi TAGS="${DOCKER_IMAGE}:${VERSION}" if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then - MINOR=${VERSION%.*} - MAJOR=${MINOR%.*} - TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest" + TAGS="$TAGS,${DOCKER_IMAGE}:latest" PUSH=true - # elif [ "${{ github.event_name }}" = "push" ]; then - # TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}" fi - echo ::set-output name=version::${VERSION} - echo ::set-output name=tags::${TAGS} - echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ') - echo ::set-output name=push::${PUSH} + printf "%s\n" \ + "version=${VERSION}" \ + "tags=${TAGS}" \ + "created=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ + "push=${PUSH}" | tee -a .github_env + + - name: Upload .github_env + uses: actions/upload-artifact@v2 + with: + name: GITHUB_ENV + path: .github_env + + lint: + needs: [configure] + runs-on: ubuntu-latest + env: + working-directory: ./client + steps: + - uses: actions/checkout@v2 + + - name: Lint Dockerfiles + uses: docker://hadolint/hadolint:latest + with: + entrypoint: hadolint + args: client/Dockerfile + + # - name: Validate docker-compose.yml + # run: | + # docker-compose -f docker-compose.yml config >/dev/null + + - name: Install dependencies + working-directory: ${{env.working-directory}} + run: npm ci + + - name: Run ESLint + working-directory: ${{env.working-directory}} + run: npm run lint + + docker: + needs: [lint] + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - name: Download .github_env + uses: actions/download-artifact@v2 + with: + name: GITHUB_ENV + path: . + + - name: Restore $GITHUB_ENV + run: cat .github_env >> $GITHUB_ENV + - name: Set up QEMU uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 - - name: Login to DockerHub - if: steps.prep.outputs.push == 'true' + + - name: Login to Docker Hub Registry + if: env.push == 'true' uses: docker/login-action@v1 with: username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push id: docker_build uses: docker/build-push-action@v2 @@ -82,18 +115,11 @@ jobs: context: client file: client/Dockerfile platforms: linux/amd64 - push: ${{ steps.prep.outputs.push }} - tags: ${{ steps.prep.outputs.tags }} + push: ${{ env.push }} + tags: ${{ env.tags }} labels: | - org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.created=${{ env.created }} org.opencontainers.image.source=${{ github.repositoryUrl }} - org.opencontainers.image.version=${{ steps.prep.outputs.version }} + org.opencontainers.image.version=${{ env.version }} org.opencontainers.image.revision=${{ github.sha }} org.opencontainers.image.licenses=${{ github.event.repository.license.name }} - - name: Push README to DockerHub - if: steps.prep.outputs.push == 'true' - uses: peter-evans/dockerhub-description@v2 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_PASSWORD }} - repository: ${{ env.docker_repository }} diff --git a/.github/workflows/lock.yml b/.github/workflows/lock.yml index a1d5c74..13f1619 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock.yml @@ -1,4 +1,4 @@ -name: 'Lock Threads' +name: Lock threads on: schedule: diff --git a/client/Dockerfile b/client/Dockerfile index 6f2f525..5924eca 100644 --- a/client/Dockerfile +++ b/client/Dockerfile @@ -1,11 +1,13 @@ # pull official node base image FROM node:16.6.0-alpine3.12 as build + WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH COPY package.json ./ COPY package-lock.json ./ -RUN npm ci --silent -RUN npm install react-scripts@3.4.1 -g --silent + +RUN npm ci --silent \ + && npm install react-scripts@3.4.1 -g --silent COPY src ./src COPY public ./public RUN npm run build @@ -20,8 +22,9 @@ WORKDIR /usr/share/nginx/html COPY env.sh . COPY env_vars . -RUN apk add --no-cache bash -RUN chmod +x env.sh +# hadolint ignore=DL3018 +RUN apk add --no-cache bash \ + && chmod +x env.sh EXPOSE 80 CMD ["/bin/bash", "-c", "/usr/share/nginx/html/env.sh && nginx -g \"daemon off;\""] diff --git a/docker-compose.yml b/docker-compose.yml index af0e851..4dab9c1 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -57,6 +57,8 @@ services: - date-annotator - person-name-annotator - location-annotator + - contact-annotator + - id-annotator phi-deidentifier-app: image: nlpsandbox/phi-deidentifier-app:1.1.0 @@ -64,6 +66,8 @@ services: context: client dockerfile: Dockerfile container_name: phi-deidentifier-app + env_file: + - .env environment: - SERVER_PORT=${SERVER_PORT} - SERVER_PROTOCOL=${SERVER_PROTOCOL} @@ -91,7 +95,7 @@ services: - nlpsandbox - nlpsandbox-internal ports: - - "80:80" + - "${SERVER_PORT}:80" depends_on: - phi-deidentifier-app