1- name : Create Release & And push Docker image
2-
1+ name : Create Release
32env :
43 DOCKER_IMAGE : wyrihaximusgithubactions/supported-php-versions
5- DOCKER_BUILDKIT : 1
64 MILESTONE : ${{ github.event.milestone.title }}
75on :
86 milestone :
97 types :
108 - closed
119jobs :
10+ wait-for-status-checks :
11+ name : Wait for status checks
12+ runs-on : ubuntu-latest
13+ steps :
14+ - uses : actions/checkout@v1
15+ - run : sleep 13
16+ - name : ' Wait for status checks'
17+ id : waitforstatuschecks
18+ uses : " WyriHaximus/github-action-wait-for-status@master"
19+ with :
20+ ignoreActions : " Wait for status checks"
21+ checkInterval : 5
22+ env :
23+ GITHUB_TOKEN : " ${{ secrets.GITHUB_TOKEN }}"
24+ - id : generate-version-strategy
25+ if : steps.waitforstatuschecks.outputs.status != 'success'
26+ name : Fail
27+ run : exit 1
28+ generate-version-strategy :
29+ name : Generate Version Strategy
30+ needs :
31+ - wait-for-status-checks
32+ runs-on : ubuntu-latest
33+ outputs :
34+ docker_versions : ${{ steps.generate-version-strategy.outputs.docker_versions }}
35+ tag_versions : ${{ steps.generate-version-strategy.outputs.tag_versions }}
36+ steps :
37+ - uses : actions/checkout@v1
38+ - uses : WyriHaximus/github-action-break-up-semver@master
39+ id : breakupsemver
40+ with :
41+ version : ${{ env.MILESTONE }}
42+ - id : generate-version-strategy
43+ name : Generate Versions
44+ env :
45+ MAJOR : ${{ steps.breakupsemver.outputs.v_major }}
46+ MAJOR_MINOR : ${{ steps.breakupsemver.outputs.v_major_minor }}
47+ MAJOR_MINOR_PATCH : ${{ steps.breakupsemver.outputs.v_major_minor_patch }}
48+ run : |
49+ echo "::set-output name=docker_versions::[\"${MAJOR}\",\"${MAJOR_MINOR}\",\"${MAJOR_MINOR_PATCH}\"]"
50+ git tag > tag.list
51+ cat tag.list
52+ printf "::set-output name=tag_versions::%s" $(jq --raw-input --slurp 'split("\n")' tag.list -c | php -r "echo json_encode(array_values(array_diff_assoc(json_decode('[\"${MAJOR}\",\"${MAJOR_MINOR}\",\"${MAJOR_MINOR_PATCH}\"]'), json_decode(stream_get_contents(STDIN)))));")
1253 generate-changelog :
1354 name : Generate Changelog
55+ needs :
56+ - generate-version-strategy
1457 runs-on : ubuntu-latest
1558 outputs :
1659 changelog : ${{ steps.changelog.outputs.changelog }}
@@ -26,19 +69,56 @@ jobs:
2669 run : echo "${CHANGELOG}"
2770 env :
2871 CHANGELOG : ${{ steps.changelog.outputs.changelog }}
72+ tag-docker-image :
73+ name : Tag Docker image for version ${{ matrix.version }}
74+ needs :
75+ - generate-version-strategy
76+ strategy :
77+ matrix :
78+ version : ${{ fromJson(needs.generate-version-strategy.outputs.docker_versions) }}
79+ runs-on : ubuntu-latest
80+ steps :
81+ - name : Login to Docker Hub
82+ env :
83+ DOCKER_USER : ${{ secrets.HUB_USERNAME }}
84+ DOCKER_PASSWORD : ${{ secrets.HUB_PASSCODE }}
85+ run : |
86+ echo "${{ secrets.DOCKER_PASSWORD }}" | \
87+ docker login \
88+ --username "${{ secrets.DOCKER_USER }}" \
89+ --password-stdin
90+ - name : Pull source image
91+ run : docker pull "${DOCKER_IMAGE}:sha-${GITHUB_SHA}"
92+ - name : Retag images for release
93+ run : docker tag "${DOCKER_IMAGE}:sha-${GITHUB_SHA}" "${DOCKER_IMAGE}:${{ matrix.version }}"
94+ - run : docker images
95+ - name : Push release images to Docker Hub
96+ run : docker push "${DOCKER_IMAGE}:${{ matrix.version }}"
2997 create-release :
3098 name : Create Release
3199 needs :
100+ - generate-version-strategy
101+ - tag-docker-image
32102 - generate-changelog
103+ strategy :
104+ matrix :
105+ version : ${{ fromJson(needs.generate-version-strategy.outputs.tag_versions) }}
33106 runs-on : ubuntu-latest
34107 steps :
35- - uses : actions/checkout@v2
108+ - uses : actions/checkout@v1
109+ - name : Create release/${{ matrix.version }} branch
110+ run : git checkout -b release/${{ matrix.version }} ${GITHUB_SHA}
111+ - run : sed -i 's/master/${{ matrix.version }}/g' Dockerfile
112+ - run : cat Dockerfile
113+ - run : git add Dockerfile
114+ - run : git status
115+ - run : echo -e "${CHANGELOG}" > release-${{ matrix.version }}-changelog.md
36116 env :
37117 CHANGELOG : ${{ needs.generate-changelog.outputs.changelog }}
38118 - run : |
39- echo -e "${MILESTONE_DESCRIPTION}\r\n\r\n${CHANGELOG}" > release-${{ env.MILESTONE }}-release-message.md
40- cat release-${{ env.MILESTONE }}-release-message.md
41- release_message=$(cat release-${{ env.MILESTONE }}-release-message.md)
119+ echo -e "${MILESTONE_DESCRIPTION}\r\n\r\n${CHANGELOG}" > release-${{ matrix.version }}-release-message.md
120+ cat release-${{ matrix.version }}-release-message.md
121+ release_message=$(cat release-${{ matrix.version }}-release-message.md)
42122 release_message="${release_message//'%'/'%25'}"
43123 release_message="${release_message//$'\n'/'%0A'}"
44124 release_message="${release_message//$'\r'/'%0D'}"
@@ -47,26 +127,45 @@ jobs:
47127 env:
48128 MILESTONE_DESCRIPTION: ${{ github.event.milestone.description }}
49129 CHANGELOG: ${{ needs.generate-changelog.outputs.changelog }}
50- - name : Create Release with Changelog
130+ - run : cat release-${{ matrix.version }}-changelog.md
131+ - name : Set git commit user
132+ run : |
133+ git config user.name '${{ github.actor }}'
134+ git config user.email '${{ github.actor }}@users.noreply.github.com'
135+ - run : git commit -F release-${{ matrix.version }}-changelog.md
136+ - run : git tag -F release-${{ matrix.version }}-changelog.md ${{ matrix.version }}
137+ - name : Push changes
138+ 139+ with :
140+ tags : true
141+ branch : release/${{ matrix.version }}
142+ github_token : ${{ secrets.GITHUB_TOKEN }}
143+ - name : Create Reference Release with Changelog
144+ if : ${{ matrix.version == env.MILESTONE }}
51145 uses : fleskesvor/create-release@feature/support-target-commitish
52146 env :
53147 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
54148 with :
55- tag_name : ${{ env.MILESTONE }}
56- release_name : ${{ env.MILESTONE }}
149+ tag_name : ${{ matrix.version }}
150+ release_name : ${{ matrix.version }}
57151 body : ${{ steps.releasemessage.outputs.release_message }}
58152 draft : false
59153 prerelease : false
60- tag :
61- runs-on : ' ubuntu-latest'
62- steps :
63- - uses : actions/checkout@v2
64- - run : docker build . -t "${DOCKER_IMAGE}:${{ env.MILESTONE }}"
65- - name : Login to Docker Hub
66- run : |
67- echo "${{ secrets.HUB_PASSCODE }}" | \
68- docker login \
69- --username "${{ secrets.HUB_USERNAME }}" \
70- --password-stdin
71- - name : Push release
72- run : docker push "${DOCKER_IMAGE}:${{ env.MILESTONE }}"
154+ commitish : release/${{ matrix.version }}
155+ - name : Create Release with Changelog
156+ if : ${{ matrix.version != env.MILESTONE }}
157+ uses : fleskesvor/create-release@feature/support-target-commitish
158+ env :
159+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
160+ with :
161+ tag_name : ${{ matrix.version }}
162+ release_name : ${{ matrix.version }}
163+ body : Reference tag to ${{ env.MILESTONE }}
164+ draft : false
165+ prerelease : false
166+ commitish : release/${{ matrix.version }}
167+ - name : Delete release/${{ matrix.version }} branch
168+ uses : dawidd6/action-delete-branch@v3
169+ with :
170+ github_token : ${{github.token}}
171+ branches : release/${{ matrix.version }}
0 commit comments