Skip to content

Docker image update #1423

Docker image update

Docker image update #1423

Workflow file for this run

name: Docker image update
on:
push:
branches:
- "master"
paths:
- ".github/workflows/docker-build.yml"
- "app/**"
- "Dockerfile-parent"
schedule:
- cron: "0 0 * * *"
jobs:
build:
runs-on: ubuntu-latest
env:
TAG: v3
DOCKERFILE: Dockerfile-parent
IMAGE: axelop/dart_package_analyzer
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 1
- name: Get labels
continue-on-error: true
id: labels
uses: axel-op/docker-labels-retriever@master
with:
image: ${{ env.IMAGE }}:${{ env.TAG }}
registry: docker-hub
- name: Check current image
id: check
env:
EVENT: ${{ github.event_name }}
DART_IMAGE: library/dart
DART_VERSION: latest
GIT_FLUTTER: git://github.com/flutter/flutter.git
FLUTTER_BRANCH: stable
PANA_DOC: https://pub.dev/api/documentation/pana
run: |
CURRENT_FLUTTER=$(git ls-remote $GIT_FLUTTER refs/heads/$FLUTTER_BRANCH | cut -f 1)
CURRENT_PANA=$(curl -s $PANA_DOC | jq -r '.latestStableVersion')
API_TOKEN=$(curl -s "https://auth.docker.io/token?scope=repository:$DART_IMAGE:pull&service=registry.docker.io" | jq -r '.token')
CURRENT_DART=$(curl -s -H "Authorization: Bearer $API_TOKEN" -H "Accept: application/vnd.docker.distribution.manifest.v2+json" "https://registry-1.docker.io/v2/$DART_IMAGE/manifests/$DART_VERSION" | jq -r '.config.digest')
PREVIOUS_FLUTTER=${{ steps.labels.outputs.fluttersha }}
PREVIOUS_PANA=${{ steps.labels.outputs.panaversion }}
PREVIOUS_DART=${{ steps.labels.outputs.dartdigest }}
echo $CURRENT_DART is the sha for ${DART_IMAGE}:${DART_VERSION}
echo $PREVIOUS_DART is the sha labelled with the Docker image
echo $CURRENT_FLUTTER is the latest commit in the $FLUTTER_BRANCH branch of Flutter
echo $PREVIOUS_FLUTTER is the commit of Flutter on Docker image
echo $CURRENT_PANA is the latest version of pana
echo $PREVIOUS_PANA is the version of pana on Docker image
if [ "$EVENT" = push ] || [ "$CURRENT_FLUTTER" != "$PREVIOUS_FLUTTER" ] || [ "$CURRENT_PANA" != "$PREVIOUS_PANA" ] || [ "$CURRENT_DART" != "$PREVIOUS_DART" ]; then
SHOULD_PUSH=true
else
SHOULD_PUSH=false
fi
echo "CURRENT_FLUTTER=$CURRENT_FLUTTER" >> $GITHUB_ENV
echo "CURRENT_PANA=$CURRENT_PANA" >> $GITHUB_ENV
echo "CURRENT_DART=$CURRENT_DART" >> $GITHUB_ENV
echo "should_push=$SHOULD_PUSH" >> "$GITHUB_OUTPUT"
- name: Build new image
if: steps.check.outputs.should_push == 'true'
run: sudo docker build --label "fluttersha=$CURRENT_FLUTTER" --label "panaversion=$CURRENT_PANA" --label "dartdigest=$CURRENT_DART" -f $DOCKERFILE -t $IMAGE:$TAG .
- name: Test new image
if: steps.check.outputs.should_push == 'true'
run: |
sudo docker run -d -t --name test $IMAGE:$TAG
sudo docker cp ${GITHUB_WORKSPACE}/test/. test:/test
sudo docker cp $GITHUB_EVENT_PATH test:/eventpayload
sudo docker exec -e GITHUB_WORKSPACE=/test -e GITHUB_EVENT_PATH=/eventpayload -e GITHUB_SHA=$GITHUB_SHA -e GITHUB_REPOSITORY=$GITHUB_REPOSITORY -e INPUT_MINANNOTATIONLEVEL=info -e INPUT_GITHUBTOKEN=${{ secrets.GITHUB_TOKEN }} test /bin/bash -c "/dart_package_analyzer"
- name: Push new image
if: steps.check.outputs.should_push == 'true'
env:
DOCKER_USERNAME: axelop
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
run: |
echo $DOCKER_TOKEN | sudo docker login --username=$DOCKER_USERNAME --password-stdin
sudo docker push $IMAGE:$TAG