-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Tweak Github Actions to play better with pixi
- Loading branch information
Showing
2 changed files
with
162 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,161 @@ | ||
name: Build and Push Docker Image | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
working_directory: | ||
type: string | ||
description: What directory should the image be built from | ||
required: true | ||
image_name: | ||
type: string | ||
description: Name of Docker image | ||
required: true | ||
image_tag: | ||
type: string | ||
description: Tag for Docker image | ||
required: true | ||
push_image: | ||
type: boolean | ||
description: Should the image be pushed to the Github Container Registry | ||
required: false | ||
default: false | ||
secrets: | ||
GH_TOKEN: | ||
description: Github access token | ||
required: false | ||
SLACK_WEBHOOK_URL: | ||
description: Slack webhook URL to send messages to | ||
required: false | ||
outputs: | ||
image_name: | ||
description: Fully qualified image name | ||
value: ${{ jobs.build-image.outputs.image_name}} | ||
image_ref: | ||
description: Docker image reference | ||
value: ${{ jobs.build-image.outputs.image_ref }} | ||
|
||
workflow_dispatch: | ||
inputs: | ||
working_directory: | ||
type: string | ||
description: What directory should the image be built from | ||
required: true | ||
image_name: | ||
type: string | ||
description: Name of Docker image | ||
required: true | ||
image_tag: | ||
type: string | ||
description: Tag for Docker image | ||
required: true | ||
push_image: | ||
type: boolean | ||
description: Should the image be pushed to the Github Container Registry | ||
required: false | ||
default: false | ||
|
||
jobs: | ||
build-image: | ||
runs-on: ubuntu-22.04 | ||
name: Build and push image | ||
timeout-minutes: 30 | ||
|
||
outputs: | ||
image_name: ${{ steps.env_var.outputs.image_name }} | ||
image_ref: ${{ steps.env_var.outputs.image_ref }} | ||
|
||
steps: | ||
- name: Checkout Repository | ||
uses: actions/checkout@v2 | ||
|
||
- name: Set up Docker Buildx | ||
uses: docker/[email protected] | ||
|
||
- name: Cache Docker layers | ||
uses: actions/[email protected] | ||
with: | ||
path: /tmp/.buildx-cache | ||
key: ohw-docker-buildx-${{ inputs.image_name }}-${{ github.sha }} | ||
restore-keys: | | ||
ohw-docker-buildx-${{ inputs.image_name }} | ||
- name: Set Job Environment Variables | ||
id: env_var | ||
run: | | ||
SHA7="${GITHUB_SHA::7}" | ||
DOCKER_TAG=$SHA7 | ||
IMAGE_NAME="ghcr.io/${{ github.repository_owner }}/${{ inputs.image_name }}" | ||
echo "DOCKER_TAG=${{ inputs.image_tag }}" >> $GITHUB_ENV | ||
echo "IMAGE_NAME=${IMAGE_NAME}" >> $GITHUB_ENV | ||
echo "::set-output name=image_name::${IMAGE_NAME})" | ||
echo "::set-output name=image_ref::${DOCKER_TAG})" | ||
- name: Build Docker Image | ||
uses: docker/[email protected] | ||
with: | ||
tags: | | ||
${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }} | ||
cache-from: type=local,src=/tmp/.buildx-cache | ||
cache-to: type=local,dest=/tmp/.buildx-cache-new | ||
push: false | ||
load: true | ||
context: ${{ inputs.working_directory }} | ||
|
||
- name: Docker image sizes | ||
run: | | ||
docker images | grep ${{ env.IMAGE_NAME }} | ||
echo "### Image sizes" >> $GITHUB_STEP_SUMMARY | ||
docker images | grep ${{ env.IMAGE_NAME }} >> $GITHUB_STEP_SUMMARY | ||
- name: Export Full Conda Environment | ||
run: | | ||
docker run ${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }} pixi list > conda-packages.txt | ||
echo "### Conda Environment" >> $GITHUB_STEP_SUMMARY | ||
cat conda-packages.txt >> $GITHUB_STEP_SUMMARY | ||
- name: Archive Conda Package List | ||
uses: actions/upload-artifact@v1 | ||
with: | ||
name: conda-packages | ||
path: conda-packages.txt | ||
|
||
- name: "Log into GitHub Container Registery" | ||
uses: docker/[email protected] | ||
if: ${{ inputs.push_image}} | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.repository_owner }} | ||
password: ${{ secrets.GH_TOKEN || secrets.GITHUB_TOKEN }} | ||
|
||
- name: Push Docker Image to GitHub Container Registry | ||
if: ${{ inputs.push_image }} | ||
run: docker push ${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }} | ||
|
||
- name: Notify on newly built image | ||
if: ${{ inputs.push_image }} | ||
uses: slackapi/[email protected] | ||
env: | ||
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} | ||
SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK | ||
with: | ||
payload: | | ||
{ | ||
"text": "Built image ${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }}. Maybe let 2i2c know?", | ||
"blocks": [ | ||
{ | ||
"type": "section", | ||
"text": { | ||
"type": "mrkdwn", | ||
"text": "Built image `${{ env.IMAGE_NAME }}:${{ env.DOCKER_TAG }}`. Maybe let 2i2c know?" | ||
} | ||
} | ||
] | ||
} | ||
- name: Move Docker Cache | ||
run: | | ||
rm -rf /tmp/.buildx-cache | ||
mv /tmp/.buildx-cache-new /tmp/.buildx-cache |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters