Vib Build #58
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
name: Vib Build | |
on: | |
push: | |
branches: [ "main" ] | |
schedule: | |
- cron: '21 3 * * *' | |
workflow_dispatch: | |
env: | |
CUSTOM_IMAGE_NAME: vos-image | |
jobs: | |
check_update: | |
runs-on: ubuntu-latest | |
outputs: | |
has_updates: ${{ steps.set_output.outputs.has_updates }} | |
base_image_type: ${{ steps.read_base_recipe.outputs.base_image_type }} | |
permissions: | |
contents: write | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Install dependencies | |
run: sudo apt-get install jq | |
- name: Read base image name from recipe | |
id: read_base_recipe | |
run: | | |
BASE_IMAGE="$(cat recipe.yml | grep "ghcr.io/vanilla-os" | awk -F ' ' '{print $2}')" | |
echo The base image is $BASE_IMAGE | |
BASE_IMAGE_TYPE="$(echo $BASE_IMAGE | awk -F '/' '{print $3}' | awk -F ':' '{print $1}')" | |
echo "base_image_type=$BASE_IMAGE_TYPE" >> "$GITHUB_OUTPUT" | |
echo "BASE_IMAGE_TYPE=$BASE_IMAGE_TYPE" >> "$GITHUB_ENV" | |
- name: get last successful run | |
if: ${{ github.ref_type == 'branch' }} | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
continue-on-error: true | |
run: | | |
gh run list -b "${{ github.ref_name }}" -w "${{ github.workflow }}" -s "success" -L 1 --json databaseId > last_run.json | |
echo "LAST_RUN_ID=$(jq -r '.[0].databaseId' last_run.json)" >> "$GITHUB_ENV" | |
- name: Download previous digest | |
uses: actions/download-artifact@v4 | |
continue-on-error: true | |
with: | |
name: digest | |
github-token: ${{ github.token }} | |
run-id: ${{ env.LAST_RUN_ID }} | |
- name: Check if there was an update to the base image | |
run: | | |
touch digest.txt | |
mv digest.txt last_digest.txt | |
curl https://differ.vanillaos.org/images/${{ env.BASE_IMAGE_TYPE }} > vanilla-image-info | |
jq -r '.image.releases[-1].digest' vanilla-image-info > digest.txt | |
echo Old digest is: $(cat last_digest.txt) | |
echo New digest is: $(cat digest.txt) | |
echo "HAS_UPDATES=$(cmp -s digest.txt last_digest.txt; echo $?)" >> "$GITHUB_ENV" | |
- name: Upload current digest | |
uses: actions/upload-artifact@v4 | |
with: | |
name: digest | |
path: digest.txt | |
- name: Set output | |
id: set_output | |
run: | | |
if [ ${{ github.event_name == 'schedule'}} == false ] | |
then | |
echo action was manually run, updating either way | |
echo "has_updates=true" >> "$GITHUB_OUTPUT" | |
elif [ ${{ env.HAS_UPDATES }} == 1 ] | |
then | |
echo base image was updated since last build | |
echo "has_updates=true" >> "$GITHUB_OUTPUT" | |
else | |
echo no updates to the base image since last build | |
echo "has_updates=false" >> "$GITHUB_OUTPUT" | |
fi | |
build: | |
runs-on: ubuntu-latest | |
needs: check_update | |
if: ${{ needs.check_update.outputs.has_updates == 'true' }} | |
permissions: | |
packages: write | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: vanilla-os/vib-gh-action@v0.3.3-1 | |
with: | |
recipe: 'recipe.yml' | |
plugins: 'Vanilla-OS/vib-fsguard:v1.2-1' | |
- name: Generate image name | |
run: | | |
REPO_OWNER_LOWERCASE="$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')" | |
echo "REPO_OWNER_LOWERCASE=$REPO_OWNER_LOWERCASE">> "$GITHUB_ENV" | |
echo "IMAGE_TAG=ghcr.io/$REPO_OWNER_LOWERCASE/${{ env.CUSTOM_IMAGE_NAME }}:main">> "$GITHUB_ENV" | |
- name: Set image info | |
run: | | |
echo -n "vanilla-os/${{ needs.check_update.outputs.base_image_type }}" > ./includes.container/image-info/base-image-name | |
echo -n "${{ env.REPO_OWNER_LOWERCASE }}/${{ env.CUSTOM_IMAGE_NAME }}" > ./includes.container/image-info/image-name | |
- name: Build the Docker image | |
run: docker image build -f Containerfile --tag "${{ env.IMAGE_TAG }}" . | |
- name: Push To GHCR | |
run: | | |
docker login ghcr.io -u ${{ github.repository_owner }} -p ${{ secrets.GITHUB_TOKEN }} | |
docker image push "${{ env.IMAGE_TAG }}" |