Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .github/ISSUE_TEMPLATE.md

This file was deleted.

4 changes: 2 additions & 2 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ assignees: ''

## Steps to reproduce the behavior

## mc --version
- (paste output of `mc --version`)
## mcli --version
- (paste output of `mcli --version`)

## System information
14 changes: 9 additions & 5 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
## Community Contribution License
All community contributions in this pull request are licensed to the project maintainers
under the terms of the [Apache 2 license](https://www.apache.org/licenses/LICENSE-2.0).
By creating this pull request I represent that I have the right to license the
contributions to the project maintainers under the Apache 2 license.
This project does not use a CLA; contributions are accepted inbound=outbound.
All community contributions in this pull request are licensed under the
[GNU AGPL v3.0 or later](https://www.gnu.org/licenses/agpl-3.0.html), the
license of this project, and every commit must carry a DCO `Signed-off-by`
trailer (`git commit -s`) certifying the
[Developer Certificate of Origin](https://developercertificate.org/) —
see [CONTRIBUTING.md](https://github.com/pgsty/mc/blob/main/CONTRIBUTING.md).

## Description

Expand All @@ -20,7 +23,8 @@ contributions to the project maintainers under the Apache 2 license.
- [ ] Breaking change (fix or feature that would cause existing functionality to change)

## Checklist:
- [ ] All commits are signed off (`git commit -s`) per the [DCO](https://developercertificate.org/)
- [ ] Fixes a regression (If yes, please add `commit-id` or `PR #` here)
- [ ] Unit tests added/updated
- [ ] Internal documentation updated
- [ ] Create a documentation update request [here](https://github.com/minio/docs/issues/new?label=doc-change,title=Doc+Updated+Needed+For+PR+github.com%2fminio%2fmc%2fpull%2fNNNNN)
- [ ] Documentation update requested (open an issue at [pgsty/mc](https://github.com/pgsty/mc/issues) if silo.pgsty.com content needs updating)
2 changes: 1 addition & 1 deletion .github/nfpm.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ release: ${NFPM_RELEASE}
section: utils
priority: optional
maintainer: "Ruohang Feng (@Vonng) <rh@vonng.com>"
description: S3-Interface Libre Object Storage, Community-maintained MinIO client fork.
description: Silo object storage client (mcli), a community-maintained fork of the MinIO Client.
vendor: PGSTY
homepage: https://silo.pgsty.com
license: AGPL-3.0-or-later
Expand Down
43 changes: 43 additions & 0 deletions .github/workflows/dco.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: DCO

on:
pull_request:
branches:
- main

permissions:
contents: read

jobs:
check:
name: Verify DCO sign-off
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

# Every non-merge commit in the pull request must carry a Signed-off-by
# trailer matching the commit author's email, certifying the Developer
# Certificate of Origin 1.1 (https://developercertificate.org/).
# Bot-authored commits (dependabot etc.) are exempt.
- name: Check Signed-off-by trailers
env:
BASE_SHA: ${{ github.event.pull_request.base.sha }}
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
run: |
fail=0
while read -r sha; do
author_name="$(git log -1 --format='%an' "${sha}")"
author_email="$(git log -1 --format='%ae' "${sha}")"
case "${author_name}" in
*"[bot]"*) continue ;;
esac
if ! git log -1 --format='%(trailers:key=Signed-off-by,valueonly)' "${sha}" |
grep -qiF "<${author_email}>"; then
echo "::error::commit ${sha} by ${author_name} <${author_email}> lacks a matching Signed-off-by trailer; sign with 'git commit -s', repair with 'git rebase --signoff'"
fail=1
fi
done < <(git rev-list --no-merges "${BASE_SHA}..${HEAD_SHA}")
exit "${fail}"
6 changes: 6 additions & 0 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -91,5 +91,11 @@ jobs:
go mod tidy
git diff --exit-code -- go.mod go.sum

# Brand policy gate: user-visible surfaces must keep the Silo identity
# and never reintroduce MinIO endpoints or commercial upsell, while
# protocol-compatibility identifiers stay untouched.
- name: Check branding policy
run: bash buildscripts/check-branding.sh

- name: Test 386
run: GOOS=linux GOARCH=386 go test -short ./...
22 changes: 16 additions & 6 deletions CONFLICT.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,21 @@
## mc (MinIO Client) v/s Midnight Commander (mc)
## mc (this client) v/s Midnight Commander (mc)

There has been some amount of [requests](https://github.com/minio/mc/issues?q=is%3Aissue+midnight+commander+is%3Aclosed) on renaming this project to avoid the conflict with Midnight Commander for Unix distributions. We struggled with this, it is harder to find a name sweeter and shorter than `mc` for MinIO Client.
The `mc` command name is inherited from the upstream MinIO Client and conflicts
with GNU Midnight Commander on many Unix distributions. The upstream project
[declined to rename](https://github.com/minio/mc/issues?q=is%3Aissue+midnight+commander+is%3Aclosed)
its binary, and this fork keeps the upstream command name for script
compatibility. The two programs share no code or ideas — only the abbreviation
matches. Midnight Commander (mc) is a free software clone of Norton
Commander (nc), while this client is a single, fully self-contained static
binary for object storage.

Besides `mc` is a single static binary and can reside inside your application and is fully self contained. Midnight Commander (mc) is a free software clone of Norton Commander (nc). MinIO and Midnight shares no code or ideas. Only their abbreviation matches.

Package managers are free to choose a different name if they like. One such solution [pointed out](https://github.com/minio/mc/issues/873#issuecomment-267583013) by one of our community members.
To avoid the conflict, the standalone archives and Linux packages of this fork
install the binary as `mcli` — the approach
[suggested](https://github.com/minio/mc/issues/873#issuecomment-267583013) in
the upstream issue tracker. The configuration directory follows the invoked
name: `mc` uses `~/.mc`, `mcli` uses `~/.mcli`. Package managers remain free to
choose a different name:

```
mv ./mc ./mcli
```
```
60 changes: 52 additions & 8 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
### Setup your mc Github Repository
Fork [mc upstream](https://github.com/minio/mc/fork) source repository to your own personal repository.
### Set up your mc GitHub Repository
Fork the [pgsty/mc](https://github.com/pgsty/mc/fork) repository to your own personal repository.
```
$ mkdir -p $GOPATH/src/github.com/minio
$ cd $GOPATH/src/github.com/minio
$ git clone https://github.com/$USER_ID/mc
$ cd mc
$ make
Expand All @@ -16,21 +14,67 @@ $ ./mc --help
* Go ahead and fork the project and make your changes. We encourage pull requests to discuss code changes.
- Fork it
- Create your feature branch (git checkout -b my-new-feature)
- Commit your changes (git commit -am 'Add some feature')
- Commit your changes with a DCO sign-off (git commit -s -am 'Add some feature')
- Push to the branch (git push origin my-new-feature)
- Create new Pull Request
- Create new Pull Request against the `main` branch of [pgsty/mc](https://github.com/pgsty/mc)

* If you have additional dependencies for ``mc``, ``mc`` manages its dependencies using `go mod`
- Run `go get foo/bar`
- Edit your code to import foo/bar
- Run `GO111MODULE=on go mod tidy` from top-level folder
- Run `go mod tidy` from top-level folder

* When you're ready to create a pull request, be sure to:
- Have test cases for the new code. If you have questions about how to do it, please ask in your pull request.
- Run `go fmt`
- Squash your commits into a single commit. `git rebase -i`. It's okay to force update your pull request.
- Make sure `make install` completes.

* Read [Effective Go](https://github.com/golang/go/wiki/CodeReviewComments) article from Golang project
* Read [Go Code Review Comments](https://go.dev/wiki/CodeReviewComments) from the Go project
- `mc` project is conformant with Golang style
- if you happen to observe offending code, please feel free to send a pull request

### Licensing of Contributions

This project is licensed under the [GNU AGPL v3.0 or later](LICENSE). Its core
is Copyright (c) MinIO, Inc.; the combined work can never be relicensed, and
this fork does not try to.

* **No CLA.** We do not ask you to sign a Contributor License Agreement and we
do not take your copyright. Contributions are accepted inbound=outbound: you
keep the copyright to your changes and license them under the same
AGPL-3.0-or-later as the project itself. The maintainers receive no rights
beyond the project license.

* **DCO sign-off required.** Every commit must carry a
`Signed-off-by: Your Name <you@example.com>` trailer certifying the
[Developer Certificate of Origin 1.1](https://developercertificate.org/) —
your statement that you have the right to submit the code under the project
license. Sign each commit with:

```
git commit -s
```

Forgot some? Repair your branch with `git rebase --signoff` and force-push.
CI rejects pull requests containing unsigned commits; the sign-off email
must match the commit author email. (Lowercase `-s` is the plain-text DCO
sign-off; cryptographic `-S`/GPG signing is welcome but independent.)

* **Provenance.** Only submit code you are entitled to submit. When relaying a
patch written by someone else — for example cherry-picking from the archived
upstream or another fork — preserve original authorship
(`git cherry-pick -x`, keep the author field and any existing
`Signed-off-by` trailers) and add your own sign-off as the person passing it
along.

* **File headers.** Files derived from upstream keep the original MinIO
copyright header unchanged. New files added by this fork use the dual
header, followed by the standard AGPL boilerplate:

```
// Copyright (c) 2015-2025 MinIO, Inc.
// Copyright (c) 2025-2026 PGSTY
```

* **Squash merges** must keep the `Signed-off-by:` trailers in the resulting
commit message.
4 changes: 2 additions & 2 deletions Dockerfile.goreleaser
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@ LABEL maintainer="Ruohang Feng (@Vonng) <rh@vonng.com>" \
org.opencontainers.image.vendor="PGSTY" \
org.opencontainers.image.url="https://silo.pgsty.com" \
org.opencontainers.image.source="https://github.com/pgsty/mc" \
org.opencontainers.image.description="S3-Interface Libre Object Storage, Community-maintained MinIO client fork." \
org.opencontainers.image.description="Silo object storage client (mcli), a community-maintained fork of the MinIO Client." \
org.opencontainers.image.licenses="AGPL-3.0-or-later" \
description="S3-Interface Libre Object Storage, Community-maintained MinIO client fork."
description="Silo object storage client (mcli), a community-maintained fork of the MinIO Client."

COPY --from=certs /tmp/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY mc /usr/bin/mc
Expand Down
6 changes: 5 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,11 @@ getdeps:
crosscompile:
@(env bash $(PWD)/buildscripts/cross-compile.sh)

verifiers: getdeps vet lint
verifiers: getdeps vet lint check-brand

check-brand:
@echo "Running $@ check"
@(env bash $(PWD)/buildscripts/check-branding.sh)

docker: build
@docker build -t $(TAG) . -f Dockerfile.dev
Expand Down
8 changes: 8 additions & 0 deletions NOTICE
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,11 @@ The MinIO project contains unmodified/modified subcomponents too with
separate copyright notices and license terms. Your use of the source
code for the these subcomponents is subject to the terms and conditions
of the following licenses.

===

This distribution (pgsty/mc, shipped as "mcli") is a community-maintained
fork of the MinIO Client, modified by the Silo project
(https://silo.pgsty.com/). It is not affiliated with, endorsed by, or
sponsored by MinIO, Inc. Modifications are Copyright (c) 2025-2026 PGSTY
and are licensed under the GNU AGPL v3.0 or later.
16 changes: 14 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@ The official project portal is [silo.pgsty.com](https://silo.pgsty.com/). It bri
| Vulnerability reporting | [Security Policy](https://silo.pgsty.com/about/security/) |
| License, attribution, and trademark information | [`LICENSE`](LICENSE), [`NOTICE`](NOTICE), [`CREDITS`](CREDITS), and the portal's [License](https://silo.pgsty.com/about/license/), [Attribution](https://silo.pgsty.com/about/attribution/), and [Trademark](https://silo.pgsty.com/about/trademark/) pages |

## Related Projects

| Repository | Description |
| :-- | :-- |
| [`pgsty/silo`](https://github.com/pgsty/silo) | Silo object storage server — the S3-compatible MinIO fork this client accompanies |
| [`pgsty/mc`](https://github.com/pgsty/mc) | This repository — the Silo client, shipped as `mcli` with the `mc` command name |
| [`pgsty/silo-console`](https://github.com/pgsty/silo-console) | Admin web console for the Silo server |
| [`pgsty/silo-pkg`](https://github.com/pgsty/silo-pkg) | Shared Go packages maintained for the Silo forks |
| [`pgsty/pigsty`](https://github.com/pgsty/pigsty) | Pigsty — the PostgreSQL distribution that ships Silo as its object storage |

## Maintenance Policy

The active `main` release line covers:
Expand Down Expand Up @@ -89,7 +99,7 @@ Use [Download & Install](https://silo.pgsty.com/download/#client) to choose a cl
| Standalone archives | [GitHub Releases](https://github.com/pgsty/mc/releases), providing `mcli` for Linux, macOS, and Windows on `amd64` and `arm64` |
| Linux packages | RPM, DEB, and APK for `x86_64`/`aarch64`, also distributed through the [Pigsty repository](https://pigsty.io/docs/repo/infra/list/#object-storage) |
| Container image | [`pgsty/mc`](https://hub.docker.com/r/pgsty/mc), multi-arch for `linux/amd64` and `linux/arm64`, with `mc` as the entrypoint |
| Silo bundle | [`pgsty/minio`](https://hub.docker.com/r/pgsty/minio) includes the client as `mcli` with an `mc` compatibility alias |
| Silo bundle | [`pgsty/silo`](https://hub.docker.com/r/pgsty/silo) includes the client as `mcli` with an `mc` compatibility alias |
| Documentation | [Client command reference](https://silo.pgsty.com/reference/minio-mc/) and [administration command reference](https://silo.pgsty.com/reference/minio-mc-admin/) |

## Quick Start
Expand All @@ -107,7 +117,7 @@ The container retains the familiar `mc` entrypoint:

```bash
docker run --rm pgsty/mc:latest --version
docker run --rm pgsty/mc:latest ls play
docker run --rm pgsty/mc:latest alias ls
```

> [!WARNING]
Expand Down Expand Up @@ -144,6 +154,8 @@ Useful contributions include security and dependency updates, reproducible bug f

Issues and pull requests should include the affected client and server versions, reproduction steps, impact, expected behavior, tests, and compatibility notes. Discuss large changes in an issue first.

There is no CLA: contributions are accepted inbound=outbound under the project license (AGPL-3.0-or-later) and contributors keep their copyright. Every commit must be signed off (`git commit -s`) per the [Developer Certificate of Origin](https://developercertificate.org/); see [`CONTRIBUTING.md`](CONTRIBUTING.md).

## Background

The upstream [`minio/mc`](https://github.com/minio/mc) repository was archived after its final 2025 development line. Pigsty maintains this fork because Silo needs a reproducible companion client release channel rather than depending on an archived upstream project.
Expand Down
16 changes: 14 additions & 2 deletions README_zh_CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,16 @@
| 私密漏洞报告 | [安全策略](https://silo.pgsty.com/zh/about/security/) |
| 许可证、署名与商标信息 | [`LICENSE`](LICENSE)、[`NOTICE`](NOTICE)、[`CREDITS`](CREDITS),以及门户的[许可证](https://silo.pgsty.com/zh/about/license/)、[署名归属](https://silo.pgsty.com/zh/about/attribution/)与[商标政策](https://silo.pgsty.com/zh/about/trademark/)页面 |

## 相关项目

| 仓库 | 说明 |
| :-- | :-- |
| [`pgsty/silo`](https://github.com/pgsty/silo) | Silo 对象存储服务器 —— 本客户端配套的 S3 兼容 MinIO fork |
| [`pgsty/mc`](https://github.com/pgsty/mc) | 本仓库 —— Silo 客户端,以 `mcli` 发行、保留 `mc` 命令名 |
| [`pgsty/silo-console`](https://github.com/pgsty/silo-console) | Silo 服务器的 Web 管理控制台 |
| [`pgsty/silo-pkg`](https://github.com/pgsty/silo-pkg) | 为 Silo 系 fork 维护的共享 Go 包 |
| [`pgsty/pigsty`](https://github.com/pgsty/pigsty) | Pigsty —— 内置 Silo 作为对象存储的 PostgreSQL 发行版 |

## 维护政策

活跃的 `main` 版本线覆盖:
Expand Down Expand Up @@ -89,7 +99,7 @@
| 独立归档包 | [GitHub Releases](https://github.com/pgsty/mc/releases),提供 Linux、macOS、Windows 的 `amd64` 与 `arm64` 版本,命令名为 `mcli` |
| Linux 软件包 | 面向 `x86_64`/`aarch64` 的 RPM、DEB 与 APK,同时通过 [Pigsty 软件仓库](https://pigsty.cc/docs/repo/infra/list/#object-storage) 分发 |
| 容器镜像 | [`pgsty/mc`](https://hub.docker.com/r/pgsty/mc),支持 `linux/amd64` 与 `linux/arm64` 多架构清单,以 `mc` 作为入口 |
| Silo 内置客户端 | [`pgsty/minio`](https://hub.docker.com/r/pgsty/minio) 以 `mcli` 提供本客户端,并保留 `mc` 兼容别名 |
| Silo 内置客户端 | [`pgsty/silo`](https://hub.docker.com/r/pgsty/silo) 以 `mcli` 提供本客户端,并保留 `mc` 兼容别名 |
| 文档 | [客户端命令参考](https://silo.pgsty.com/zh/reference/minio-mc/)与[管理命令参考](https://silo.pgsty.com/zh/reference/minio-mc-admin/) |

## 快速开始
Expand All @@ -107,7 +117,7 @@ mcli ls local/demo

```bash
docker run --rm pgsty/mc:latest --version
docker run --rm pgsty/mc:latest ls play
docker run --rm pgsty/mc:latest alias ls
```

> [!WARNING]
Expand Down Expand Up @@ -144,6 +154,8 @@ make build

Issue 与 Pull Request 应说明受影响的客户端与服务端版本、复现步骤、影响、预期行为、测试与兼容性说明。大型改动请先提交 Issue 讨论。

本项目不要求签署 CLA:贡献按项目许可证(AGPL-3.0-or-later,inbound=outbound)接收,贡献者保留自己的版权。每个提交都必须按照 [DCO](https://developercertificate.org/) 签署(`git commit -s`),详见 [`CONTRIBUTING.md`](CONTRIBUTING.md)。

## 背景

上游 [`minio/mc`](https://github.com/minio/mc) 仓库在 2025 年最后一条开发线后归档。Pigsty 维护此分支,是因为 Silo 需要可复现的配套客户端发布渠道,而不能继续依赖已经归档的上游项目。
Expand Down
1 change: 0 additions & 1 deletion _config.yml

This file was deleted.

Loading
Loading