# .github/workflows/ci.yml # Continuous Integration (CI) Workflow name: ci # This workflow will run whenever we push commits to the `main` branch, or # whenever there's a pull request to the `main` branch. See: # https://docs.github.com/en/actions/learn-github-actions/workflow-syntax-for-github-actions#on on: pull_request: branches: - main push: branches: - main jobs: lint: name: ESLint runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: '18' cache: 'npm' - name: Install node dependencies run: npm ci - name: Run ESLint run: npm run lint # Lint our Dockerfile using Hadolint dockerfile-lint: name: Dockerfile Lint runs-on: ubuntu-latest steps: # https://github.com/marketplace/actions/hadolint-action - uses: actions/checkout@v3 - uses: hadolint/hadolint-action@v3.1.0 with: dockerfile: Dockerfile unit-tests: name: Unit Tests runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: '18' cache: 'npm' - name: Install node dependencies and run Tests # There are two ways we could do this: # # 1. Call `npm ci` followed by `npm test` like so (NOTE: the use of | and -): # run: | # - npm install # - npm test # # 2. Use `install-ci-test` to do it in a single command, see https://docs.npmjs.com/cli/v8/commands/npm-install-ci-test # run: npm install-ci-test run: npm install-ci-test integration-tests: name: Integration Tests runs-on: ubuntu-latest steps: - name: Check out code uses: actions/checkout@v3 - name: Setup node uses: actions/setup-node@v3 with: node-version: '18' cache: 'npm' - name: Install node dependencies # NOTE: we need to install dev dependencies too vs. production only for hurl run: npm install - name: Build Containers run: docker compose up -d - name: Run script to make executable run: chmod +x ./scripts/local-aws-setup.sh - name: Setup Local AWS Resources # NOTE: this file needs to be made executable *before* you check into git: # $ chmod +x ./scripts/local-aws-setup.sh run: ./scripts/local-aws-setup.sh - name: Run Hurl Tests run: npm run test:integration docker-hub: name: Build and Push to Docker Hub # Don't bother running this job unless the other three all pass needs: [lint, dockerfile-lint, unit-tests, integration-tests] runs-on: ubuntu-latest steps: # Set up buildx for optimal Docker Builds, see: # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 # Login to Docker Hub using GitHub secrets, see: # https://github.com/docker/login-action - name: Login to DockerHub uses: docker/login-action@v2 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_TOKEN }} # Build and Push an Image to Docker Hub - name: Build and push env: # Define an Environment Variable with our Docker Hub Repoo # Replace `username` with your Docker Hub username and `fragments` # with whatever you've named your Docker Hub repo DOCKERHUB_REPO: phongma123/fragments # Define an Environment Variable with the current git commit's # sha: sha-87f664e01bb5f242faa411e9e7fb9e75a58ae767 # Use the `github` context to get this, see: # https://docs.github.com/en/actions/learn-github-actions/contexts#github-context SHA_TAG: sha-${{ github.sha }} uses: docker/build-push-action@v3 with: push: true # Use 3 tags :sha-sha-7d821bd14e0d6c381dc57a5369ae1a3a9220664f, :main, and :latest tags: ${{ env.DOCKERHUB_REPO }}:${{ env.SHA_TAG }}, ${{ env.DOCKERHUB_REPO }}:main, ${{ env.DOCKERHUB_REPO }}:latest