Skip to content

Commit

Permalink
Tweak Github Actions to play better with pixi
Browse files Browse the repository at this point in the history
  • Loading branch information
abkfenris committed Jul 31, 2024
1 parent fff2b7d commit fe4fa1f
Show file tree
Hide file tree
Showing 2 changed files with 162 additions and 1 deletion.
161 changes: 161 additions & 0 deletions .github/workflows/build-pixi-image.yml
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
2 changes: 1 addition & 1 deletion .github/workflows/py-image.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:

build_push:
needs: [shortsha]
uses: ./.github/workflows/build-image.yml
uses: ./.github/workflows/build-pixi-image.yml
with:
working_directory: ./py-base
image_tag: ${{ needs.shortsha.outputs.shortsha }}
Expand Down

0 comments on commit fe4fa1f

Please sign in to comment.