runner/.forgejo/workflows/docker-build-push-action-in-lxc.yml
Earl Warren 51fb504a2e
feat: add an LXC based example of docker/build-push-action usage (#781)
The motivations for this additional example are:

- Using https://github.com/docker/build-push-action/ with the Forgejo runner is a recurring question and there is no example of how to do that
- Reproducing https://code.forgejo.org/forgejo/runner/issues/208 will benefit from this example

---

<!--start release-notes-assistant-->
<!--URL:https://code.forgejo.org/forgejo/runner-->
- features
  - [PR](https://code.forgejo.org/forgejo/runner/pulls/781): <!--number 781 --><!--line 0 --><!--description ZmVhdDogYWRkIGFuIExYQyBiYXNlZCBleGFtcGxlIG9mIGRvY2tlci9idWlsZC1wdXNoLWFjdGlvbiB1c2FnZSBbc2tpcCBjYXNjYWRlXQ==-->feat: add an LXC based example of docker/build-push-action usage [skip cascade]<!--description-->
<!--end release-notes-assistant-->

Reviewed-on: https://code.forgejo.org/forgejo/runner/pulls/781
Reviewed-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Earl Warren <contact@earl-warren.org>
Co-committed-by: Earl Warren <contact@earl-warren.org>
2025-08-01 14:04:02 +00:00

78 lines
3.1 KiB
YAML

#
# Example that requires a Forgejo runner with an [LXC backend](https://forgejo.org/docs/latest/admin/actions/runner-installation/#setting-up-the-container-environment).
#
# - Start a Forgejo instance to be used as a container registry
# - Build a container image using the [docker/build-push-action](https://code.forgejo.org/docker/build-push-action) action
# - Push the image to the Forgejo instance
# - Retrieve the image
#
# Runs of this workflow can be seen in [the Forgejo runner](https://code.forgejo.org/forgejo/runner/actions?workflow=docker-build-push-action-in-lxc.yml) logs.
#
name: example
on:
push:
branches:
- 'main'
pull_request:
env:
FORGEJO_VERSION: 11.0.3 # renovate: datasource=docker depName=code.forgejo.org/forgejo/forgejo
FORGEJO_USER: root
FORGEJO_PASSWORD: admin1234
jobs:
docker-build-push-action-in-lxc:
if: forge.repository_owner != 'forgejo-integration' && forge.repository_owner != 'forgejo-experimental' && forge.repository_owner != 'forgejo-release'
runs-on: lxc-bookworm
steps:
- name: install Forgejo so it can be used as a container registry
id: registry
uses: https://data.forgejo.org/actions/setup-forgejo@v3.0.1
with:
user: ${{ env.FORGEJO_USER }}
password: ${{ env.FORGEJO_PASSWORD }}
binary: https://code.forgejo.org/forgejo/forgejo/releases/download/v${{ env.FORGEJO_VERSION }}/forgejo-${{ env.FORGEJO_VERSION }}-linux-amd64
lxc-ip-prefix: 10.0.9
- name: enable insecure / http uploads to the Forgejo registry
run: |-
set -x
# the docker daemon was implicitly installed when Forgejo was
# installed in the previous step. But it will refuse to connect
# to an insecure / http registry by default and must be told
# otherwise
cat > /etc/docker/daemon.json <<EOF
{
"insecure-registries" : ["${{ steps.registry.outputs.host-port }}"]
}
EOF
systemctl restart docker
- uses: https://data.forgejo.org/docker/setup-qemu-action@v3
- uses: https://data.forgejo.org/docker/setup-buildx-action@v2
with:
# insecure / http connections to the registry are allowed
config-inline: |
[registry."${{ steps.registry.outputs.host-port }}"]
http = true
- name: login to the Forgejo registry
uses: https://data.forgejo.org/docker/login-action@v3
with:
registry: ${{ steps.registry.outputs.host-port }}
username: ${{ env.FORGEJO_USER }}
password: ${{ env.FORGEJO_PASSWORD }}
- name: build and push to the Forgejo registry
uses: https://data.forgejo.org/docker/build-push-action@v5
with:
context: examples/docker-build-push-action
push: true
tags: ${{ steps.registry.outputs.host-port }}/root/testimage:latest
- name: verify the image can be read from the Forgejo registry
run: |
set -x
docker pull ${{ steps.registry.outputs.host-port }}/root/testimage:latest