name: Build, test, analyze and publish on: push: branches: [ master ] pull_request: branches: [ master ] paths-ignore: - '**/*.md' - '**/*.png' jobs: # Build docker image from branch and run tests build: name: Build and test runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 - name: Build lowlighter/metrics:${{ github.head_ref || 'master' }} run: docker build -t lowlighter/metrics:${{ github.head_ref || 'master' }} . - name: Run tests run: docker run --workdir=/metrics --entrypoint="" lowlighter/metrics:${{ github.head_ref || 'master' }} npm test # Run CodeQL on branch analyze: name: Analyze code runs-on: ubuntu-latest needs: [ build ] steps: - name: Checkout repository uses: actions/checkout@v2 - name: Setup CodeQL uses: github/codeql-action/init@v1 with: languages: javascript config-file: ./.github/config/codeql.yml - name: Analyze code uses: github/codeql-action/analyze@v1 # Build docker image from master and publish it to GitHub registry docker-master: name: Publish master to GitHub registry runs-on: ubuntu-latest needs: [ build ] if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - name: Checkout repository uses: actions/checkout@v2 - name: Login to GitHub registry run: echo ${{ secrets.CONTAINER_REGISTRY_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Build docker image run: docker build -t ghcr.io/lowlighter/metrics:master . - name: Publish to GitHub registry run: docker push ghcr.io/lowlighter/metrics:master # Test lowlighter/metrics@master action-master-test: name: Test lowlighter/metrics@master runs-on: ubuntu-latest needs: [ docker-master ] if: github.event_name == 'push' && github.ref == 'refs/heads/master' steps: - name: Run tests uses: lowlighter/metrics@master with: token: MOCKED_TOKEN plugins_errors_fatal: yes dryrun: yes use_mocked_data: yes verify: yes use_prebuilt_image: master # Build docker image from master and publish it to GitHub registry with release tag docker-release: name: Publish release to GitHub registry runs-on: ubuntu-latest needs: [ build, analyze, action-master-test ] if: github.event_name == 'push' && github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[release]') steps: - name: Checkout repository uses: actions/checkout@v2 - name: Login to GitHub registry run: echo ${{ secrets.CONTAINER_REGISTRY_TOKEN }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin - name: Pull docker image (master) run: docker pull ghcr.io/lowlighter/metrics:master - name: Tag docker image (release) run: docker tag ghcr.io/lowlighter/metrics:master ghcr.io/lowlighter/metrics:$(echo '${{ github.event.head_commit.message }}' | grep -Po 'v\d+[.]\d+') - name: Publish release to GitHub registry run: docker push ghcr.io/lowlighter/metrics:$(echo '${{ github.event.head_commit.message }}' | grep -Po 'v\d+[.]\d+') - name: Tag docker image (latest) run: docker tag ghcr.io/lowlighter/metrics:master ghcr.io/lowlighter/metrics:latest - name: Publish latest to GitHub registry run: docker push ghcr.io/lowlighter/metrics:latest # Test lowlighter/metrics@latest action-lastest-test: name: Test lowlighter/metrics@latest runs-on: ubuntu-latest needs: [ docker-release ] if: github.event_name == 'push' && github.ref == 'refs/heads/master' && contains(github.event.head_commit.message, '[release]') steps: - name: Run tests uses: lowlighter/metrics@latest with: token: MOCKED_TOKEN plugins_errors_fatal: yes dryrun: yes use_mocked_data: yes verify: yes