fix: Put export script in own image

HEREDOC support for podman doesn't work exactly 1-1 with Dockerfiles. This fix gives the export script its own image that we mount.
This commit is contained in:
Gerald Pinder 2024-03-27 00:08:58 -04:00
parent ae9c3ef83a
commit 19c93ce742
9 changed files with 29 additions and 28 deletions

View file

@ -44,6 +44,8 @@ jobs:
packages: write
timeout-minutes: 60
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Maximize build space
@ -78,6 +80,8 @@ jobs:
contents: read
packages: write
id-token: write
needs:
- build
steps:
- name: Maximize build space

View file

@ -58,6 +58,8 @@ jobs:
packages: write
timeout-minutes: 60
runs-on: ubuntu-latest
needs:
- build
steps:
- name: Maximize build space
@ -92,6 +94,8 @@ jobs:
contents: read
packages: write
id-token: write
needs:
- build
steps:
- name: Maximize build space

View file

@ -10,6 +10,9 @@ all:
BUILD ./integration-tests+all
build:
WAIT
BUILD +exports-script
END
BUILD +lint
BUILD +test
BUILD +blue-build-cli
@ -33,6 +36,12 @@ install:
SAVE ARTIFACT target/$BUILD_TARGET/release/bluebuild
exports-script:
FROM alpine
COPY exports.sh /
RUN chmod +x exports.sh
SAVE IMAGE --push ghcr.io/blue-build/cli/exports
common:
FROM ghcr.io/blue-build/earthly-lib/cargo-builder

View file

@ -75,12 +75,10 @@ impl<'a> Module<'a> {
#[must_use]
pub fn print_module_context(&'a self) -> String {
serde_json::to_string(self)
.unwrap_or_else(|e| {
error!("Failed to parse module!!!!!: {e}");
process::exit(1);
})
.replace('"', r#"\""#)
serde_json::to_string(self).unwrap_or_else(|e| {
error!("Failed to parse module!!!!!: {e}");
process::exit(1);
})
}
#[must_use]

View file

@ -75,12 +75,6 @@ pub struct GithubIssueTemplate<'a> {
terminal_version: Cow<'a, str>,
}
fn print_export_script() -> String {
trace!("print_export_script()");
include_str!("../templates/export.sh").replace('$', r"\$")
}
fn has_cosign_file() -> bool {
trace!("has_cosign_file()");
std::env::current_dir()

View file

@ -1,3 +1,4 @@
# syntax=docker/dockerfile:1
{%- include "stages.j2" %}
FROM {{ recipe.base_image }}:{{ recipe.image_version }}

View file

@ -27,15 +27,14 @@ RUN \
{%- if type == "akmods" %}
--mount=type=bind,from=stage-akmods-{{ module.generate_akmods_info(os_version).stage_name }},src=/rpms,dst=/tmp/rpms,rw \
{%- endif %}
--mount=type=bind,from=stage-exports,src=/exports.sh,dst=/tmp/exports.sh \
--mount=type=bind,from=ghcr.io/blue-build/cli/exports,src=/exports.sh,dst=/tmp/exports.sh \
--mount=type=cache,dst=/var/cache/rpm-ostree,id=rpm-ostree-cache-{{ recipe.name }}-{{ recipe.image_version }},sharing=locked \
/bin/bash -c " \
echo '========== Start {{ type|capitalize }} module ==========' \
&& chmod +x /tmp/modules/{{ type }}/{{ type }}.sh \
&& source /tmp/exports.sh \
&& /tmp/modules/{{ type }}/{{ type }}.sh '{{ module.print_module_context() }}' \
&& echo '========== End {{ type|capitalize }} module ==========' \
&& ostree container commit"
echo "========== Start {{ type|capitalize }} module ==========" \
&& chmod +x /tmp/modules/{{ type }}/{{ type }}.sh \
&& source /tmp/exports.sh \
&& /tmp/modules/{{ type }}/{{ type }}.sh '{{ module.print_module_context() }}' \
&& echo "========== End {{ type|capitalize }} module ==========" \
&& ostree container commit
{%- endif %}
{%- endif %}
{%- endfor %}

View file

@ -42,11 +42,3 @@ COPY cosign.pub /keys/{{ recipe.name|replace('/', "_") }}.pub
{%- endif %}
{%- include "modules/akmods/akmods.j2" %}
# This stage is responsible for holding onto
# exports like the exports.sh
FROM docker.io/alpine as stage-exports
COPY <<EOF /exports.sh
{{ self::print_export_script() }}
EOF
RUN chmod +x /exports.sh