44 release :
55 types :
66 - published
7+
78env :
89 REGISTRIES_FILENAME : " registries.json"
910
1011jobs :
1112 push :
1213 name : Push
1314 runs-on : ubuntu-24.04
15+ env :
16+ GCR_REGISTRY : " gcr.io"
17+ GCR_PASSWORD : ${{ secrets.GCR_PUSH_BOT_JSON_KEY }}
18+ GCR_USERNAME : " _json_key"
19+ DOCKERHUB_REGISTRY : docker.io
20+ DOCKERHUB_USERNAME : ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_USERNAME }}
21+ DOCKERHUB_PASSWORD : ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_PASSWORD }}
22+
1423 steps :
1524
1625 - name : Checkout
@@ -25,16 +34,31 @@ jobs:
2534 echo "tag_full=${FULL_VERSION}" >> "$GITHUB_OUTPUT"
2635 echo "tag_minor=${MINOR_VERSION}" >> "$GITHUB_OUTPUT"
2736 echo "tag_major=${MAJOR_VERSION}" >> "$GITHUB_OUTPUT"
28- echo "download_url=$(jq -r '.release.assets[] | select(.name | endswith(".cnb")) | .url' "${GITHUB_EVENT_PATH}")" >> "$GITHUB_OUTPUT"
37+ echo "download_tgz_file_url=$(jq -r '.release.assets[] | select(.name | endswith(".tgz")) | .url' "${GITHUB_EVENT_PATH}")" >> "$GITHUB_OUTPUT"
38+ echo "download_cnb_file_url=$(jq -r --arg tag_full "$FULL_VERSION" '.release.assets[] | select(.name | endswith($tag_full + ".cnb")) | .url' "${GITHUB_EVENT_PATH}")" >> "$GITHUB_OUTPUT"
39+ echo "download_sha256_file_url=$(jq -r '.release.assets[] | select(.name | endswith("index-digest.sha256")) | .url' "${GITHUB_EVENT_PATH}")" >> "$GITHUB_OUTPUT"
2940
30- - name : Download
31- id : download
41+ - name : Download .cnb buildpack
3242 uses : paketo-buildpacks/github-config/actions/release/download-asset@main
3343 with :
34- url : ${{ steps.event.outputs.download_url }}
44+ url : ${{ steps.event.outputs.download_cnb_file_url }}
3545 output : " /github/workspace/buildpackage.cnb"
3646 token : ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}
3747
48+ - name : Download .tgz buildpack
49+ uses : paketo-buildpacks/github-config/actions/release/download-asset@main
50+ with :
51+ url : ${{ steps.event.outputs.download_tgz_file_url }}
52+ output : " /github/workspace/buildpack.tgz"
53+ token : ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}
54+
55+ - name : Download .sha digest
56+ uses : paketo-buildpacks/github-config/actions/release/download-asset@main
57+ with :
58+ url : ${{ steps.event.outputs.download_sha256_file_url }}
59+ output : " /github/workspace/index-digest.sha256"
60+ token : ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}
61+
3862 - name : Parse Configs
3963 id : parse_configs
4064 run : |
@@ -64,41 +88,74 @@ jobs:
6488 exit 1
6589 fi
6690
67- - name : Push to GCR
68- if : ${{ steps.parse_configs.outputs.push_to_gcr == 'true' }}
69- env :
70- GCR_PUSH_BOT_JSON_KEY : ${{ secrets.GCR_PUSH_BOT_JSON_KEY }}
91+ - name : Get buildpack type
92+ id : get_buildpack_type
7193 run : |
72- echo "${GCR_PUSH_BOT_JSON_KEY}" | sudo skopeo login --username _json_key --password-stdin gcr.io
73- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_full }}"
74- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_minor }}"
75- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:${{ steps.event.outputs.tag_major }}"
76- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://gcr.io/${{ github.repository }}:latest"
94+ if [ -f "extension.toml" ]; then
95+ echo "buildpack_type=extension" >> "$GITHUB_OUTPUT"
96+ else
97+ echo "buildpack_type=buildpack" >> "$GITHUB_OUTPUT"
98+ fi
99+
100+ - name : Docker login docker.io
101+ uses : docker/login-action@v3
102+ with :
103+ username : ${{ env.DOCKERHUB_USERNAME }}
104+ password : ${{ env.DOCKERHUB_PASSWORD }}
105+ registry : ${{ env.DOCKERHUB_REGISTRY }}
106+
107+ - name : Docker login gcr.io
108+ uses : docker/login-action@v3
109+ if : ${{ steps.parse_configs.outputs.push_to_gcr == 'true' }}
110+ with :
111+ username : ${{ env.GCR_USERNAME }}
112+ password : ${{ env.GCR_PASSWORD }}
113+ registry : ${{ env.GCR_REGISTRY }}
77114
78115 - name : Push to DockerHub
79116 if : ${{ steps.parse_configs.outputs.push_to_dockerhub == 'true' }}
80117 id : push
81118 env :
82- DOCKERHUB_USERNAME : ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_USERNAME }}
83- DOCKERHUB_PASSWORD : ${{ secrets.PAKETO_BUILDPACKS_DOCKERHUB_PASSWORD }}
84119 GITHUB_REPOSITORY_OWNER : ${{ github.repository_owner }}
85120 run : |
86- REPOSITORY="${GITHUB_REPOSITORY_OWNER/-/}/${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}" # translates 'paketo-buildpacks/bundle-install' to 'paketobuildpacks/bundle-install'
87- IMAGE="index.docker.io/${REPOSITORY}"
88- echo "${DOCKERHUB_PASSWORD}" | sudo skopeo login --username "${DOCKERHUB_USERNAME}" --password-stdin index.docker.io
89- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://${IMAGE}:${{ steps.event.outputs.tag_full }}"
90- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://${IMAGE}:${{ steps.event.outputs.tag_minor }}"
91- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://${IMAGE}:${{ steps.event.outputs.tag_major }}"
92- sudo skopeo copy "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" "docker://${IMAGE}:latest"
121+ IMAGE="${GITHUB_REPOSITORY_OWNER/-/}/${GITHUB_REPOSITORY#${GITHUB_REPOSITORY_OWNER}/}" # translates 'paketo-buildpacks/bundle-install' to 'paketobuildpacks/bundle-install'
122+ echo "${DOCKERHUB_PASSWORD}" | sudo skopeo login --username "${DOCKERHUB_USERNAME}" --password-stdin ${DOCKERHUB_REGISTRY}
123+
124+ ./scripts/publish.sh \
125+ --archive-path ./buildpack.tgz \
126+ --buildpack-type ${{ steps.get_buildpack_type.outputs.buildpack_type }} \
127+ --image-ref "${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_full }}"
128+
129+ ## Validate that the digest pushed to registry matches with the one mentioned on the readme file
130+ pushed_image_index_digest=$(sudo skopeo inspect "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_full }}" | jq -r .Digest)
131+
132+ if [ "$(cat ./index-digest.sha256)" != "$pushed_image_index_digest" ]; then
133+ echo "Image index digest pushed to registry does not match with the one mentioned on the readme file"
134+ exit 1;
135+ fi
136+
137+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_full }}" "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_minor }}" --multi-arch all
138+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_full }}" "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_major }}" --multi-arch all
139+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:${{ steps.event.outputs.tag_full }}" "docker://${DOCKERHUB_REGISTRY}/${IMAGE}:latest" --multi-arch all
93140 echo "image=${IMAGE}" >> "$GITHUB_OUTPUT"
94- echo "digest=$(sudo skopeo inspect "oci-archive:${GITHUB_WORKSPACE}/buildpackage.cnb" | jq -r .Digest)" >> "$GITHUB_OUTPUT"
141+ echo "digest=$pushed_image_index_digest" >> "$GITHUB_OUTPUT"
142+
143+ - name : Push to GCR
144+ if : ${{ steps.parse_configs.outputs.push_to_gcr == 'true' }}
145+ run : |
146+ echo "${GCR_PASSWORD}" | sudo skopeo login --username "${GCR_USERNAME}" --password-stdin "${GCR_REGISTRY}"
147+
148+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${{ steps.push.outputs.image }}" "docker://${GCR_REGISTRY}/${{ github.repository }}:${{ steps.event.outputs.tag_full }}" --multi-arch all
149+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${{ steps.push.outputs.image }}" "docker://${GCR_REGISTRY}/${{ github.repository }}:${{ steps.event.outputs.tag_minor }}" --multi-arch all
150+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${{ steps.push.outputs.image }}" "docker://${GCR_REGISTRY}/${{ github.repository }}:${{ steps.event.outputs.tag_major }}" --multi-arch all
151+ sudo skopeo copy "docker://${DOCKERHUB_REGISTRY}/${{ steps.push.outputs.image }}" "docker://${GCR_REGISTRY}/${{ github.repository }}:latest" --multi-arch all
95152
96153 - name : Register with CNB Registry
97154 uses : docker://ghcr.io/buildpacks/actions/registry/request-add-entry:main
98155 with :
99156 id : ${{ github.repository }}
100157 version : ${{ steps.event.outputs.tag_full }}
101- address : ${{ steps.push.outputs.image }}@${{ steps.push.outputs.digest }}
158+ address : index.docker.io/ ${{ steps.push.outputs.image }}@${{ steps.push.outputs.digest }}
102159 token : ${{ secrets.PAKETO_BOT_GITHUB_TOKEN }}
103160
104161 failure :
0 commit comments