generated from actions/container-action
-
Notifications
You must be signed in to change notification settings - Fork 9
89 lines (80 loc) · 3.86 KB
/
docker-build.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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@v4
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-container $IMAGE:$TAG
sudo docker cp ${GITHUB_WORKSPACE}/test/. test-container:/test
sudo docker cp $GITHUB_EVENT_PATH test-container:/eventpayload
sudo docker exec test-container /bin/bash -c "cd /test && git init"
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-container /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