-
-
Notifications
You must be signed in to change notification settings - Fork 62
feat(build): use action-build-push-images #1802
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 9 commits
5eec0bb
9c06ef6
32eff4c
3e345bb
204491a
26bdfd2
833926c
54ed7b1
b17e8af
5de2c8e
fa6d944
5ac1184
55ae450
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -42,6 +42,11 @@ jobs: | |
build-image: | ||
needs: build-setup | ||
|
||
permissions: | ||
contents: read | ||
packages: write # Required for GHCR | ||
id-token: write # Required for Google Artifact Registry (GAR) | ||
|
||
strategy: | ||
matrix: | ||
arch: ${{ fromJson(needs.build-setup.outputs.archs) }} | ||
|
@@ -107,118 +112,41 @@ jobs: | |
name: symbolicator-debug@${{ matrix.arch }} | ||
path: /tmp/debug-info/* | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
|
||
- name: Prepare Docker Context | ||
run: | | ||
mkdir docker-ctx | ||
cp Dockerfile docker-ctx/ | ||
mv symbolicator docker-ctx/ | ||
|
||
- name: Build Image | ||
uses: docker/build-push-action@v6 | ||
- name: Build and push ghcr image | ||
uses: getsentry/action-build-and-push-images@b172ab61a5f7eabd58bd42ce231b517e79947c01 | ||
with: | ||
context: docker-ctx/ | ||
image_name: 'symbolicator' | ||
platforms: linux/${{ matrix.arch }} | ||
joshuarli marked this conversation as resolved.
Outdated
Show resolved
Hide resolved
|
||
tags: symbolicator-${{ matrix.arch }} | ||
outputs: type=docker,dest=/tmp/symbolicator-${{ matrix.arch }}.tar | ||
push: false | ||
|
||
- name: Upload Image | ||
uses: actions/upload-artifact@v4 | ||
dockerfile_path: './Dockerfile' | ||
build_context: './docker-ctx' | ||
ghcr: true | ||
joshuarli marked this conversation as resolved.
Show resolved
Hide resolved
|
||
# we need to publish on prs for self hosted e2e tests | ||
publish_on_pr: true | ||
tag_nightly: false | ||
tag_latest: false | ||
|
||
- name: Build and push production image | ||
if: "needs.build-setup.outputs.full_ci == 'true'" | ||
uses: getsentry/action-build-and-push-images@b172ab61a5f7eabd58bd42ce231b517e79947c01 | ||
with: | ||
name: symbolicator-image@${{ matrix.arch }} | ||
path: /tmp/symbolicator-${{ matrix.arch }}.tar | ||
|
||
assemble-ghcr: | ||
needs: [build-setup, build-image] | ||
if: "needs.build-setup.outputs.full_ci == 'true'" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. this is now done on every commit since e2e now needs ghcr.io/getsentry/symbolicator:${{ github.sha }} because it can't download symbolicator-amd64.tar anymore not a big deal imo, very little overhead since actually building the final docker image is really fast |
||
|
||
name: Assemble for Github Container Registry | ||
runs-on: ubuntu-latest | ||
|
||
permissions: | ||
packages: write | ||
|
||
env: | ||
IMAGE: "ghcr.io/getsentry/symbolicator" | ||
|
||
steps: | ||
- name: Docker Login | ||
run: docker login --username '${{ github.actor }}' --password-stdin ghcr.io <<< "$GHCR_TOKEN" | ||
env: | ||
GHCR_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
|
||
- name: Download Images | ||
uses: actions/download-artifact@v5 | ||
with: | ||
pattern: symbolicator-image@* | ||
path: /tmp | ||
merge-multiple: true | ||
|
||
- &assemble | ||
name: Assemble and Push Images | ||
run: | | ||
set -x | ||
|
||
IMAGES=() | ||
for image in /tmp/symbolicator-*.tar; do | ||
NAME="$(basename $image .tar)" | ||
ARCH="${NAME#*-}" | ||
TARGET="${IMAGE}:${{ github.sha }}-${ARCH}" | ||
|
||
docker load --input "${image}" | ||
docker tag "${NAME}" "${TARGET}" | ||
docker push "${TARGET}" | ||
|
||
IMAGES+=("${TARGET}") | ||
done | ||
|
||
docker buildx imagetools create -t "${IMAGE}:${{ github.sha }}" "${IMAGES[@]}" | ||
|
||
if [[ "${{ github.ref_name }}" == "master" ]]; then | ||
docker buildx imagetools create -t "${IMAGE}:nightly" "${IMAGE}:${{ github.sha }}" | ||
fi | ||
|
||
assemble-ar: | ||
needs: [build-setup, build-image] | ||
if: "needs.build-setup.outputs.full_ci == 'true'" | ||
|
||
name: Assemble for Google Artifact Registry | ||
runs-on: ubuntu-latest | ||
|
||
permissions: | ||
contents: read | ||
id-token: write | ||
|
||
env: | ||
IMAGE: "us-central1-docker.pkg.dev/sentryio/symbolicator/image" | ||
|
||
steps: | ||
- name: Google Auth | ||
id: auth | ||
uses: google-github-actions/auth@v3 | ||
with: | ||
workload_identity_provider: projects/868781662168/locations/global/workloadIdentityPools/prod-github/providers/github-oidc-pool | ||
service_account: [email protected] | ||
|
||
- name: Set up Cloud SDK | ||
uses: google-github-actions/setup-gcloud@v3 | ||
with: | ||
version: ">= 390.0.0" | ||
|
||
- name: Configure Docker | ||
run: gcloud auth configure-docker us-central1-docker.pkg.dev | ||
|
||
- name: Download Images | ||
uses: actions/download-artifact@v5 | ||
with: | ||
pattern: symbolicator-image@* | ||
path: /tmp | ||
merge-multiple: true | ||
|
||
- *assemble | ||
image_name: 'symbolicator' | ||
platforms: linux/${{ matrix.arch }} | ||
dockerfile_path: './Dockerfile' | ||
build_context: './docker-ctx' | ||
ghcr: false | ||
google_ar: true | ||
# note: nightly will only be tagged if on default branch | ||
tag_nightly: true | ||
joshuarli marked this conversation as resolved.
Show resolved
Hide resolved
|
||
tag_latest: false | ||
google_ar_image_name: us-central1-docker.pkg.dev/sentryio/symbolicator/image | ||
google_workload_identity_provider: projects/868781662168/locations/global/workloadIdentityPools/prod-github/providers/github-oidc-pool | ||
google_service_account: [email protected] | ||
|
||
gocd-artifacts: | ||
needs: [build-setup, build-image] | ||
|
@@ -260,18 +188,9 @@ jobs: | |
timeout-minutes: 30 | ||
|
||
steps: | ||
- name: Download Docker Image | ||
uses: actions/download-artifact@v5 | ||
with: | ||
pattern: symbolicator-image@amd64 | ||
path: /tmp | ||
|
||
- name: Load Docker Image | ||
run: docker load --input /tmp/symbolicator-amd64.tar | ||
|
||
- name: Run Sentry self-hosted e2e CI | ||
uses: getsentry/self-hosted@master | ||
with: | ||
project_name: symbolicator | ||
image_url: symbolicator-amd64 | ||
image_url: ghcr.io/getsentry/symbolicator:${{ github.event.pull_request.head.sha || github.sha }} | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this will still fail on forks, we may need to ensure we're building the image on forks, saving the artifact, and loading it here to ensure it works There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Something similar to https://github.com/getsentry/relay/blob/master/.github/workflows/ci.yml#L521-L531 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. i thought we want to skip publishing (so that CI can still pass overall) if it's a run from a fork? it's okay to have the permissions and push images to GHCR then? i feel like it's fine (as long as There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should definitely skip publishing for forks, I think I linked the wrong thing above over there, but it's still possible to build the image and save the image as an artifact to be used for the self-hosted e2e tests here even on a fork. Essentially that would require keeping the existing logic for
and adding a job to save the docker image as an artifact to be reused later. Here's the right link: https://github.com/getsentry/relay/blob/master/.github/workflows/ci.yml#L485-L503 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah, looks like i'll have to keep that stuff around |
||
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} |
Uh oh!
There was an error while loading. Please reload this page.