parent
9899ce98f7
commit
20d284c6ee
5 changed files with 125 additions and 0 deletions
35
.forgejo/workflows/build-fedora-42.yml
Normal file
35
.forgejo/workflows/build-fedora-42.yml
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: ['master']
|
||||||
|
paths:
|
||||||
|
- "fedora-42/**"
|
||||||
|
- "fedora-42-minimal/**"
|
||||||
|
- "shared/**"
|
||||||
|
- ".forgejo/workflows/build-fedora-42.yml"
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * 3" # Every Thursday 00:00
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: fedora-41
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
- name: Setup Bun
|
||||||
|
uses: oven-sh/setup-bun@v2
|
||||||
|
with:
|
||||||
|
bun-version-file: 'package.json'
|
||||||
|
- name: Fulfill Package Manager Cache
|
||||||
|
run: dnf makecache -y --releasever 42
|
||||||
|
- name: Sign in to Image Index
|
||||||
|
run: buildah login code.lightstands.xyz --username ${{ env.GITHUB_ACTOR }} --password ${{ secrets.PUBLICATION_TOKEN }}
|
||||||
|
- name: Build Minimal Images
|
||||||
|
run: DNF_CACHE_PATH=/var/cache/dnf bun shared/build-image.ts code.lightstands.xyz/standcoded/fedora-minimal:42 fedora-42-minimal arm64
|
||||||
|
- name: Push Minimal Images
|
||||||
|
run: buildah manifest push code.lightstands.xyz/standcoded/fedora-minimal:42 --all
|
||||||
|
- name: Build Complete Images
|
||||||
|
run: DNF_CACHE_PATH=/var/cache/dnf bun shared/build-image.ts code.lightstands.xyz/standcoded/fedora:42 fedora-42 arm64
|
||||||
|
- name: Push Complete Images
|
||||||
|
run: buildah manifest push code.lightstands.xyz/standcoded/fedora:42 --all
|
||||||
|
|
19
fedora-42-minimal/Containerfile
Normal file
19
fedora-42-minimal/Containerfile
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
FROM fedora:42
|
||||||
|
|
||||||
|
RUN sh /imgbuild/fedora/instpkgs-minimal.sh
|
||||||
|
|
||||||
|
# We don't clean up dnf cache since user may want to install packages for their use
|
||||||
|
|
||||||
|
ADD containers.conf /etc/containers/
|
||||||
|
|
||||||
|
RUN sh /imgbuild/configure-nested-container.sh
|
||||||
|
|
||||||
|
VOLUME /var/lib/containers
|
||||||
|
VOLUME /home/action/.local/share/containers
|
||||||
|
|
||||||
|
# Set up environment variables to note that this is
|
||||||
|
# not starting with usernamespace and default to
|
||||||
|
# isolate the filesystem with chroot.
|
||||||
|
ENV _BUILDAH_STARTED_IN_USERNS="" BUILDAH_ISOLATION=chroot
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/bin/bash" ]
|
2
fedora-42-minimal/containers.conf
Normal file
2
fedora-42-minimal/containers.conf
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[engine]
|
||||||
|
cgroup_manager = "cgroupfs"
|
7
fedora-42/Containerfile
Normal file
7
fedora-42/Containerfile
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
FROM oven/bun:1-distroless as bun
|
||||||
|
|
||||||
|
FROM localhost/runner-images/fedora-minimal:42
|
||||||
|
|
||||||
|
COPY --from=bun /usr/local/bin/bun /usr/local/bin/bun
|
||||||
|
|
||||||
|
RUN ["/usr/local/bin/bun", "/imgbuild/fedora/pkgs.ts", "install"]
|
62
shared/fedora/pkgs.ts
Normal file
62
shared/fedora/pkgs.ts
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
#!/usr/bin/env bun
|
||||||
|
|
||||||
|
type SoftwareGroup = {
|
||||||
|
name: string
|
||||||
|
packages: string[]
|
||||||
|
}
|
||||||
|
|
||||||
|
async function install(groups: SoftwareGroup[]) {
|
||||||
|
const packageNames = groups.flatMap(x => x.packages)
|
||||||
|
await Bun.$`dnf install -y --setopt install_weak_deps=False ${packageNames}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const EXT_SOFTWARES: SoftwareGroup[] = [
|
||||||
|
{
|
||||||
|
name: "Python", packages: [
|
||||||
|
"python",
|
||||||
|
"python-devel",
|
||||||
|
"poetry"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "NodeJS", packages: [
|
||||||
|
"nodejs", "nodejs-devel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Perl", packages: [
|
||||||
|
"perl", "perl-devel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Ruby", packages: [
|
||||||
|
"ruby", "ruby-devel"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "PHP", packages: [
|
||||||
|
"php", "php-devel", "composer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Java", packages: [
|
||||||
|
"java-21-openjdk", "java-21-openjdk-devel",
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "QEMU", packages: [
|
||||||
|
"qemu-user-static", "qemu-user-binfmt"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "C", packages: [
|
||||||
|
"bison", "flex", "vcpkg", "@c-development"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
const command = process.argv[2]
|
||||||
|
|
||||||
|
if (command === "install") {
|
||||||
|
await install(EXT_SOFTWARES)
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue