ecamo 0.1.0

SSL image proxy with JWT authentication
name: ci

on: 
  create: {}
  pull_request:
    branches: [main]
  push:
    branches: [main, ci-test]

env:
  DOCKER_REPO: public.ecr.aws/cookpad/ecamo

jobs:
  test:
    name: test-webapp
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
      - uses: actions-rs/cargo@v1
        with:
          command: build
      - uses: actions-rs/cargo@v1
        with:
          command: test

  test-fastlyce:
    name: test-fastlyce
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@master
      - uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          target: wasm32-wasi
          override: true
      # FIXME: https://github.com/actions-rs/cargo/issues/6
      - run: cargo build
        working-directory: ./contrib/fastlyce
      # - uses: actions-rs/cargo@v1
      #   with:
      #     command: test

  docker-build:
    name: docker-build
    runs-on: ubuntu-latest
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: aws-actions/configure-aws-credentials@v1
        # uses: aws-actions/configure-aws-credentials@a78fcb01f76c8c5c3b05ab82718a6f7919fc0269
        # https://github.com/aws-actions/configure-aws-credentials/issues/271
        with:
          aws-region: us-east-1
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          role-skip-session-tagging: 'true'
        if: "${{ github.event_name == 'push' || github.event_name == 'create' }}"
      - name: Login to ECR Public
        run: 'aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws'
        # FIXME: https://github.com/aws-actions/amazon-ecr-login/issues/116
        # uses: aws-actions/amazon-ecr-login@v1
        if: "${{ github.event_name == 'push' || github.event_name == 'create' }}"

      - uses: actions/checkout@master
      - run: 'echo $GITHUB_SHA > REVISION'

      - run: "docker pull ${DOCKER_REPO}:latest || :"
      - name: "docker tag ${DOCKER_REPO}:${TAG} ${DOCKER_REPO}:latest"
        run: |
          TAG=$(basename "${{ github.ref }}")
          docker pull ${DOCKER_REPO}:${TAG} || :
          docker tag ${DOCKER_REPO}:${TAG} ${DOCKER_REPO}:latest || :
        if: "${{ startsWith(github.ref, 'refs/tags/v') }}"

      - run: "docker pull ${DOCKER_REPO}:builder || :"

      - run: "docker build --pull --cache-from ${DOCKER_REPO}:builder --target builder -t ${DOCKER_REPO}:builder -f Dockerfile ."
      - run: "docker build --pull --cache-from ${DOCKER_REPO}:builder --cache-from ${DOCKER_REPO}:latest -t ${DOCKER_REPO}:stage-${GITHUB_SHA} -f Dockerfile ."


      - run: "docker push ${DOCKER_REPO}:stage-${GITHUB_SHA}"
        if: "${{ github.event_name == 'push' || github.event_name == 'create' }}"
      - run: "docker push ${DOCKER_REPO}:builder"
        if: "${{ github.ref == 'refs/heads/main' }}"

  docker-push:
    name: docker-push
    runs-on: ubuntu-latest
    needs: [test, docker-build]
    if: "${{ github.event_name == 'push' || github.event_name == 'create' }}"
    permissions:
      id-token: write
      contents: read
    steps:
      - uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: us-east-1
          role-to-assume: ${{ secrets.AWS_ROLE_TO_ASSUME }}
          role-skip-session-tagging: 'true'
      - name: Login to ECR Public
        run: 'aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws'

      - run: "docker pull ${DOCKER_REPO}:stage-${GITHUB_SHA}"

      - run: |
          docker tag ${DOCKER_REPO}:stage-${GITHUB_SHA} ${DOCKER_REPO}:${GITHUB_SHA}
          docker push ${DOCKER_REPO}:${GITHUB_SHA}
      - run: |
          docker tag ${DOCKER_REPO}:stage-${GITHUB_SHA} ${DOCKER_REPO}:latest
          docker push ${DOCKER_REPO}:latest
        if: "${{ github.ref == 'refs/heads/main' }}"
      - run: |
          TAG=$(basename "${{ github.ref }}")
          docker tag ${DOCKER_REPO}:stage-${GITHUB_SHA} ${DOCKER_REPO}:${TAG}
          docker push ${DOCKER_REPO}:${TAG}
        if: "${{ startsWith(github.ref, 'refs/tags/v') }}"