diff --git a/Dockerfile b/Dockerfile index 23f36c9..1327ac7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,15 @@ FROM rust:1-bullseye AS builder +ARG FEATURES="" +ARG APT_OPTIONAL="git" + WORKDIR /app COPY . . -RUN cargo build --release \ +RUN cargo build --release $FEATURES \ && mkdir -p /opt/gixor/boilerplates \ && git clone https://github.com/github/gitignore.git /opt/gixor/boilerplates/default \ && echo '{ \n\ - "base-path": "boilerplates",\n\ + "base-path": "/opt/gixor/boilerplates",\n\ "repositories": [\n\ {\n\ "url": "https://github.com/github/gitignore.git",\n\ @@ -28,9 +31,16 @@ LABEL org.opencontainers.image.source=https://github.com/tamada/gixor \ org.opencontainers.image.description="Git Ignore Managenemnt System for Multiple Repositories." RUN adduser --disabled-password --disabled-login --home /opt/gixor nonroot \ - && mkdir -p /app /opt/gixor/boilerplates + && mkdir -p /app /opt/gixor/boilerplates \ + && apt-get update \ + && apt-get install --no-install-recommends -y $APT_OPTIONAL ca-certificates \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + COPY --from=builder /app/target/release/gixor-cli /opt/gixor/gixor -COPY --from=builder /opt/gixor /opt/gixor +COPY --from=builder /opt/gixor /opt/gixor + +RUN chown -R nonroot:nonroot /opt/gixor USER nonroot diff --git a/Justfile b/Justfile index afe8059..0bd80b1 100644 --- a/Justfile +++ b/Justfile @@ -36,8 +36,9 @@ clone_tamada_ignores: clone_for_test: clone_default_ignores clone_tamada_ignores +# Generate the completion files gen_complete: - + cargo run -- --generate-completion-files prepare_site_build: test -d docs/public || git worktree add -f docs/public gh-pages @@ -64,10 +65,29 @@ start: stop: docker stop gixorwww -# Build the docker image for gixor -docker: - docker build -t ghcr.io/tamada/gixor:latest -t ghcr.io/tamada/gixor:{{VERSION}} . +# Build the docker images of gixor with different features +docker: _docker_build_default_feature _docker_build_uselibgit_feature _docker_build_usegix_feature + +_docker_build_default_feature: (_docker_build "" "git" "") +_docker_build_uselibgit_feature: (_docker_build "--features uselibgit" "" "-libgit") +_docker_build_usegix_feature: (_docker_build "--features usegix" "" "-gix") + +_docker_build features apt_optional docker_tag_suffix: + docker build \ + --build-arg APT_OPTIONAL="{{apt_optional}}" \ + --build-arg FEATURES="{{features}}" \ + -t ghcr.io/tamada/gixor:{{VERSION}}{{docker_tag_suffix}} . # Build the docker image for multiple platforms and push them into ghcr.io -docker_buildx: - docker buildx build --platform linux/arm64/v8,linux/amd64 --output=type=image,push=true -t ghcr.io/tamada/gixor:latest -t ghcr.io/tamada/gixor:{{VERSION}} . \ No newline at end of file +docker_buildx: _docker_buildx_default_feature _docker_buildx_uselibgit_feature _docker_buildx_usegix_feature + +_docker_buildx_default_feature: (_docker_buildx "" "git" "") +_docker_buildx_uselibgit_feature: (_docker_buildx "--features uselibgit" "" "-libgit") +_docker_buildx_usegix_feature: (_docker_buildx "--features usegix" "" "-gix") + +_docker_buildx features apt_optional docker_tag_suffix: + docker buildx build --platform linux/arm64/v8,linux/amd64 \ + --output=type=image,push=true \ + --build-arg APT_OPTIONAL="{{apt_optional}}" \ + --build-arg FEATURES="{{features}}" \ + -t ghcr.io/tamada/gixor:{{VERSION}}{{docker_tag_suffix}} . diff --git a/lib/src/gitbridge/git2.rs b/lib/src/gitbridge/git2.rs index e91f740..80f43be 100644 --- a/lib/src/gitbridge/git2.rs +++ b/lib/src/gitbridge/git2.rs @@ -151,9 +151,10 @@ fn normal_merge( } pub fn hash>(boilerplate: &Boilerplate, base_path: P) -> crate::Result> { + let repo_path = boilerplate.repo_path(base_path.as_ref()); let path = boilerplate.file_path(base_path); log::trace!("try to open the git repository: {}", path.display()); - let gitrepo = match git2::Repository::open(&path) { + let gitrepo = match git2::Repository::open(&repo_path) { Ok(repo) => Ok(repo), Err(_) => { let message = format!("{}: Failed to open the repository", path.display()); diff --git a/lib/src/lib.rs b/lib/src/lib.rs index a9d366b..90e83fa 100644 --- a/lib/src/lib.rs +++ b/lib/src/lib.rs @@ -349,6 +349,8 @@ impl GixorFactory { impl Gixor { fn new(config: Config, load_from: PathBuf) -> Self { + log::debug!("config path: {load_from:?}"); + log::debug!("config: {}", serde_json::to_string_pretty(&config).unwrap()); Gixor { config, load_from } } /// Returns the base path of this configuration.