2016-02-18 20:16:41 -05:00
PWD := $( shell pwd )
GOPATH := $( shell go env GOPATH)
2017-06-26 21:07:06 -04:00
LDFLAGS := $( shell go run buildscripts/gen-ldflags.go)
2017-06-02 17:05:51 -04:00
2019-09-11 19:27:59 -04:00
GOARCH := $( shell go env GOARCH)
2019-06-04 03:59:40 -04:00
GOOS := $( shell go env GOOS)
2019-09-20 19:19:56 -04:00
VERSION ?= $( shell git describe --tags)
2024-02-14 16:36:02 -05:00
REPO ?= quay.io/minio
TAG ?= $( REPO) /minio:$( VERSION)
2019-09-20 19:19:56 -04:00
2023-03-04 23:57:35 -05:00
GOLANGCI_DIR = .bin/golangci/$( GOLANGCI_VERSION)
GOLANGCI = $( GOLANGCI_DIR) /golangci-lint
2017-07-15 14:57:39 -04:00
all : build
2014-11-30 16:55:10 -05:00
2021-10-01 14:53:06 -04:00
checks : ## check dependencies
2018-02-13 23:59:19 -05:00
@echo "Checking dependencies"
2015-02-22 00:38:04 -05:00
@( env bash $( PWD) /buildscripts/checkdeps.sh)
2015-02-02 00:18:46 -05:00
2021-10-01 14:53:06 -04:00
help : ## print this help
2022-08-03 02:10:22 -04:00
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' Makefile | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-40s\033[0m %s\n", $$1, $$2}'
2021-10-01 14:53:06 -04:00
getdeps : ## fetch necessary dependencies
2019-03-27 19:16:17 -04:00
@mkdir -p ${ GOPATH } /bin
2023-12-06 21:17:03 -05:00
@echo "Installing golangci-lint" && curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $( GOLANGCI_DIR)
2024-03-21 13:21:35 -04:00
@echo "Installing msgp" && go install -v github.com/tinylib/msgp@v1.1.10-0.20240227114326-6d6f813fff1b
2021-11-05 15:20:08 -04:00
@echo "Installing stringer" && go install -v golang.org/x/tools/cmd/stringer@latest
2015-03-09 19:15:06 -04:00
2021-10-01 14:53:06 -04:00
crosscompile : ## cross compile minio
2019-01-21 22:57:23 -05:00
@( env bash $( PWD) /buildscripts/cross-compile.sh)
2023-03-09 18:15:30 -05:00
verifiers : lint check -gen
2020-09-28 16:33:34 -04:00
2021-10-01 14:53:06 -04:00
check-gen : ## check for updated autogenerated files
2020-09-28 16:33:34 -04:00
@go generate ./... >/dev/null
2024-07-03 03:16:05 -04:00
@go mod tidy -compat= 1.21
2020-10-02 14:10:39 -04:00
@( ! git diff --name-only | grep '_gen.go$$' ) || ( echo "Non-committed changes in auto-generated code is detected, please commit them to proceed." && false )
2024-07-03 03:16:05 -04:00
@( ! git diff --name-only | grep 'go.sum' ) || ( echo "Non-committed changes in auto-generated go.sum is detected, please commit them to proceed." && false )
2015-08-22 21:34:00 -04:00
2023-03-09 18:15:30 -05:00
lint : getdeps ## runs golangci-lint suite of linters
2023-04-07 10:51:31 -04:00
@echo " Running $@ check "
@$( GOLANGCI) run --build-tags kqueue --timeout= 10m --config ./.golangci.yml
2024-07-08 17:39:49 -04:00
@command typos && typos ./ || echo "typos binary is not found.. skipping.."
2023-04-07 10:51:31 -04:00
lint-fix : getdeps ## runs golangci-lint suite of linters with automatic fixes
2019-09-11 19:27:59 -04:00
@echo " Running $@ check "
2023-03-09 18:15:30 -05:00
@$( GOLANGCI) run --build-tags kqueue --timeout= 10m --config ./.golangci.yml --fix
2020-08-24 15:11:20 -04:00
2017-07-15 14:57:39 -04:00
check : test
2024-05-27 15:17:46 -04:00
test : verifiers build ## builds minio, runs linters, tests
2017-09-12 19:56:33 -04:00
@echo "Running unit tests"
2024-06-10 12:46:58 -04:00
@MINIO_API_REQUESTS_MAX= 10000 CGO_ENABLED = 0 go test -v -tags kqueue,dev ./...
2018-08-28 04:27:01 -04:00
2023-09-16 05:28:06 -04:00
test-root-disable : install -race
2023-04-28 15:24:14 -04:00
@echo "Running minio root lockdown tests"
@env bash $( PWD) /buildscripts/disable-root.sh
2024-04-19 08:48:19 -04:00
test-ilm : install -race
@echo "Running ILM tests"
@env bash $( PWD) /docs/bucket/replication/setup_ilm_expiry_replication.sh
2024-05-14 11:43:07 -04:00
test-pbac : install -race
@echo "Running bucket policies tests"
@env bash $( PWD) /docs/iam/policies/pbac-tests.sh
2023-09-16 05:28:06 -04:00
test-decom : install -race
2022-07-04 17:02:54 -04:00
@echo "Running minio decom tests"
@env bash $( PWD) /docs/distributed/decom.sh
2022-07-16 22:35:24 -04:00
@env bash $( PWD) /docs/distributed/decom-encrypted.sh
@env bash $( PWD) /docs/distributed/decom-encrypted-sse-s3.sh
2022-07-17 11:43:14 -04:00
@env bash $( PWD) /docs/distributed/decom-compressed-sse-s3.sh
2024-05-10 04:24:14 -04:00
@env bash $( PWD) /docs/distributed/decom-encrypted-kes.sh
2022-07-04 17:02:54 -04:00
2024-01-02 18:08:18 -05:00
test-versioning : install -race
@echo "Running minio versioning tests"
@env bash $( PWD) /docs/bucket/versioning/versioning-tests.sh
2023-12-08 15:04:54 -05:00
test-configfile : install -race
@env bash $( PWD) /docs/distributed/distributed-from-config-file.sh
2023-09-16 05:28:06 -04:00
test-upgrade : install -race
2021-11-21 13:41:30 -05:00
@echo "Running minio upgrade tests"
@( env bash $( PWD) /buildscripts/minio-upgrade.sh)
2021-11-10 21:18:09 -05:00
test-race : verifiers build ## builds minio, runs linters, tests (race)
2020-01-10 05:35:06 -05:00
@echo "Running unit tests under -race"
@( env bash $( PWD) /buildscripts/race.sh)
2024-06-10 12:46:58 -04:00
test-iam : install -race ## verify IAM (external IDP, etcd backends)
2021-11-09 12:25:13 -05:00
@echo "Running tests for IAM (external IDP, etcd backends)"
2024-06-28 05:06:25 -04:00
@MINIO_API_REQUESTS_MAX= 10000 CGO_ENABLED = 0 go test -timeout 15m -tags kqueue,dev -v -run TestIAM* ./cmd
2021-11-09 12:25:13 -05:00
@echo "Running tests for IAM (external IDP, etcd backends) with -race"
2024-06-28 05:06:25 -04:00
@MINIO_API_REQUESTS_MAX= 10000 GORACE = history_size = 7 CGO_ENABLED = 1 go test -timeout 15m -race -tags kqueue,dev -v -run TestIAM* ./cmd
2021-11-04 11:16:30 -04:00
2024-06-10 12:46:58 -04:00
test-iam-ldap-upgrade-import : install -race ## verify IAM (external LDAP IDP)
fix: IAM import for LDAP should replace mappings (#19607)
Existing IAM import logic for LDAP creates new mappings when the
normalized form of the mapping key differs from the existing mapping key
in storage. This change effectively replaces the existing mapping key by
first deleting it and then recreating with the normalized form of the
mapping key.
For e.g. if an older deployment had a policy mapped to a user DN -
`UID=alice1,OU=people,OU=hwengg,DC=min,DC=io`
instead of adding a mapping for the normalized form -
`uid=alice1,ou=people,ou=hwengg,dc=min,dc=io`
we should replace the existing mapping.
This ensures that duplicates mappings won't remain after the import.
Some additional cleanup cases are also covered. If there are multiple
mappings for the name normalized key such as:
`UID=alice1,OU=people,OU=hwengg,DC=min,DC=io`
`uid=alice1,ou=people,ou=hwengg,DC=min,DC=io`
`uid=alice1,ou=people,ou=hwengg,dc=min,dc=io`
we check if the list of policies mapped to all these keys are exactly
the same, and if so remove all of them and create a single mapping with
the normalized key. However, if the policies mapped to such keys differ,
the import operation returns an error as the server cannot automatically
pick the "right" list of policies to map.
2024-04-25 11:49:53 -04:00
@echo "Running upgrade tests for IAM (LDAP backend)"
@env bash $( PWD) /buildscripts/minio-iam-ldap-upgrade-import-test.sh
2023-06-15 15:43:26 -04:00
test-sio-error :
@( env bash $( PWD) /docs/bucket/replication/sio-error.sh)
2023-01-24 18:46:33 -05:00
test-replication-2site :
2022-06-06 05:54:39 -04:00
@( env bash $( PWD) /docs/bucket/replication/setup_2site_existing_replication.sh)
2023-01-24 18:46:33 -05:00
test-replication-3site :
@( env bash $( PWD) /docs/bucket/replication/setup_3site_replication.sh)
test-delete-replication :
2022-12-29 01:48:33 -05:00
@( env bash $( PWD) /docs/bucket/replication/delete-replication.sh)
2021-11-10 21:18:09 -05:00
2024-06-04 07:38:26 -04:00
test-delete-marker-proxying :
@( env bash $( PWD) /docs/bucket/replication/test_del_marker_proxying.sh)
test-replication : install -race test -replication -2site test -replication -3site test -delete -replication test -sio -error test -delete -marker -proxying ## verify multi site replication
2023-01-24 18:46:33 -05:00
@echo "Running tests for replicating three sites"
2023-09-16 05:28:06 -04:00
test-site-replication-ldap : install -race ## verify automatic site replication
2022-01-07 20:41:43 -05:00
@echo "Running tests for automatic site replication of IAM (with LDAP)"
@( env bash $( PWD) /docs/site-replication/run-multi-site-ldap.sh)
2023-09-16 05:28:06 -04:00
test-site-replication-oidc : install -race ## verify automatic site replication
2022-01-07 20:41:43 -05:00
@echo "Running tests for automatic site replication of IAM (with OIDC)"
@( env bash $( PWD) /docs/site-replication/run-multi-site-oidc.sh)
2021-12-08 14:50:15 -05:00
2023-09-16 05:28:06 -04:00
test-site-replication-minio : install -race ## verify automatic site replication
2022-01-07 22:11:54 -05:00
@echo "Running tests for automatic site replication of IAM (with MinIO IDP)"
@( env bash $( PWD) /docs/site-replication/run-multi-site-minio-idp.sh)
2024-03-28 13:44:56 -04:00
@echo "Running tests for automatic site replication of SSE-C objects"
@( env bash $( PWD) /docs/site-replication/run-ssec-object-replication.sh)
@echo "Running tests for automatic site replication of SSE-C objects with SSE-KMS enabled for bucket"
@( env bash $( PWD) /docs/site-replication/run-sse-kms-object-replication.sh)
@echo "Running tests for automatic site replication of SSE-C objects with compression enabled for site"
@( env bash $( PWD) /docs/site-replication/run-ssec-object-replication-with-compression.sh)
2022-01-07 22:11:54 -05:00
2024-09-06 06:51:23 -04:00
test-multipart : install -race ## test multipart
@echo "Test multipart behavior when part files are missing"
@( env bash $( PWD) /buildscripts/multipart-quorum-test.sh)
2024-05-27 15:17:46 -04:00
verify : install -race ## verify minio various setups
2019-12-02 18:54:26 -05:00
@echo "Verifying build with race"
2017-09-12 19:56:33 -04:00
@( env bash $( PWD) /buildscripts/verify-build.sh)
2015-01-21 03:50:23 -05:00
2024-05-27 15:17:46 -04:00
verify-healing : install -race ## verify healing and replacing disks with minio binary
2020-01-10 05:35:06 -05:00
@echo "Verify healing build with race"
@( env bash $( PWD) /buildscripts/verify-healing.sh)
2024-04-25 17:55:41 -04:00
@( env bash $( PWD) /buildscripts/verify-healing-empty-erasure-set.sh)
2022-09-07 10:25:39 -04:00
@( env bash $( PWD) /buildscripts/heal-inconsistent-versions.sh)
2016-08-04 19:48:50 -04:00
2024-05-27 15:17:46 -04:00
verify-healing-with-root-disks : install -race ## verify healing root disks
2022-08-04 19:10:08 -04:00
@echo "Verify healing with root drives"
2022-07-13 19:29:44 -04:00
@( env bash $( PWD) /buildscripts/verify-healing-with-root-disks.sh)
2024-05-27 15:17:46 -04:00
verify-healing-with-rewrite : install -race ## verify healing to rewrite old xl.meta -> new xl.meta
2022-08-03 02:10:22 -04:00
@echo "Verify healing with rewrite"
@( env bash $( PWD) /buildscripts/rewrite-old-new.sh)
2024-05-27 15:17:46 -04:00
verify-healing-inconsistent-versions : install -race ## verify resolving inconsistent versions
2022-04-20 15:49:05 -04:00
@echo "Verify resolving inconsistent versions build with race"
@( env bash $( PWD) /buildscripts/resolve-right-versions.sh)
2023-09-19 06:19:26 -04:00
build-debugging :
@( env bash $( PWD) /docs/debugging/build.sh)
2024-05-27 15:17:46 -04:00
build : checks build -debugging ## builds minio to $(PWD)
2018-02-13 23:59:19 -05:00
@echo "Building minio binary to './minio'"
2022-01-02 12:15:06 -05:00
@CGO_ENABLED= 0 go build -tags kqueue -trimpath --ldflags " $( LDFLAGS) " -o $( PWD) /minio 1>/dev/null
2014-11-01 20:04:24 -04:00
2021-02-09 12:29:43 -05:00
hotfix-vars :
$( eval LDFLAGS := $( shell MINIO_RELEASE = "RELEASE" MINIO_HOTFIX = " hotfix. $( shell git rev-parse --short HEAD) " go run buildscripts/gen-ldflags.go $( shell git describe --tags --abbrev= 0 | \
sed 's#RELEASE\.\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)T\([0-9]\+\)-\([0-9]\+\)-\([0-9]\+\)Z#\1-\2-\3T\4:\5:\6Z#' ) ) )
2021-12-02 20:33:37 -05:00
$( eval VERSION := $( shell git describe --tags --abbrev= 0) .hotfix.$( shell git rev-parse --short HEAD) )
2023-11-30 18:25:51 -05:00
hotfix : hotfix -vars clean install ## builds minio binary with hotfix tags
2024-06-18 01:48:41 -04:00
@wget -q -c https://github.com/minio/pkger/releases/download/v2.3.1/pkger_2.3.1_linux_amd64.deb
2024-01-31 04:01:30 -05:00
@wget -q -c https://raw.githubusercontent.com/minio/minio-service/v1.0.1/linux-systemd/distributed/minio.service
2024-06-18 01:48:41 -04:00
@sudo apt install ./pkger_2.3.1_linux_amd64.deb --yes
2023-11-30 18:25:51 -05:00
@mkdir -p minio-release/$( GOOS) -$( GOARCH) /archive
@cp -af ./minio minio-release/$( GOOS) -$( GOARCH) /minio
@cp -af ./minio minio-release/$( GOOS) -$( GOARCH) /minio.$( VERSION)
@minisign -qQSm minio-release/$( GOOS) -$( GOARCH) /minio.$( VERSION) -s " ${ CRED_DIR } /minisign.key " < " ${ CRED_DIR } /minisign-passphrase "
@sha256sum < minio-release/$( GOOS) -$( GOARCH) /minio.$( VERSION) | sed 's, -,minio.$(VERSION),g' > minio-release/$( GOOS) -$( GOARCH) /minio.$( VERSION) .sha256sum
@cp -af minio-release/$( GOOS) -$( GOARCH) /minio.$( VERSION) * minio-release/$( GOOS) -$( GOARCH) /archive/
@pkger -r $( VERSION) --ignore
2021-12-02 20:33:37 -05:00
hotfix-push : hotfix
2023-11-30 18:25:51 -05:00
@scp -q -r minio-release/$( GOOS) -$( GOARCH) /* minio@dl-0.minio.io:~/releases/server/minio/hotfixes/linux-amd64/
@scp -q -r minio-release/$( GOOS) -$( GOARCH) /* minio@dl-0.minio.io:~/releases/server/minio/hotfixes/linux-amd64/archive
@scp -q -r minio-release/$( GOOS) -$( GOARCH) /* minio@dl-1.minio.io:~/releases/server/minio/hotfixes/linux-amd64/
@scp -q -r minio-release/$( GOOS) -$( GOARCH) /* minio@dl-1.minio.io:~/releases/server/minio/hotfixes/linux-amd64/archive
2022-02-03 18:40:32 -05:00
@echo " Published new hotfix binaries at https://dl.min.io/server/minio/hotfixes/linux-amd64/archive/minio. $( VERSION) "
2021-12-02 20:33:37 -05:00
docker-hotfix-push : docker -hotfix
2022-02-03 18:40:32 -05:00
@docker push -q $( TAG) && echo " Published new container $( TAG) "
2020-12-08 11:12:13 -05:00
2021-12-02 20:33:37 -05:00
docker-hotfix : hotfix -push checks ## builds minio docker container with hotfix tags
2021-01-28 18:54:41 -05:00
@echo " Building minio docker image ' $( TAG) ' "
2022-02-03 18:40:32 -05:00
@docker build -q --no-cache -t $( TAG) --build-arg RELEASE = $( VERSION) . -f Dockerfile.hotfix
2021-01-28 18:54:41 -05:00
2023-01-12 04:39:12 -05:00
docker : build ## builds minio docker container
2020-06-28 11:15:15 -04:00
@echo " Building minio docker image ' $( TAG) ' "
2022-02-03 18:40:32 -05:00
@docker build -q --no-cache -t $( TAG) . -f Dockerfile
2018-09-25 13:33:25 -04:00
2024-05-27 15:17:46 -04:00
install-race : checks build -debugging ## builds minio to $(PWD)
2024-02-16 20:15:57 -05:00
@echo "Building minio binary with -race to './minio'"
2024-06-10 12:46:58 -04:00
@GORACE= history_size = 7 CGO_ENABLED = 1 go build -tags kqueue,dev -race -trimpath --ldflags " $( LDFLAGS) " -o $( PWD) /minio 1>/dev/null
2024-02-16 20:15:57 -05:00
@echo " Installing minio binary with -race to ' $( GOPATH) /bin/minio' "
2024-05-27 15:17:46 -04:00
@mkdir -p $( GOPATH) /bin && cp -af $( PWD) /minio $( GOPATH) /bin/minio
2023-09-16 05:28:06 -04:00
2021-10-01 14:53:06 -04:00
install : build ## builds minio and installs it to $GOPATH/bin.
2018-02-13 23:59:19 -05:00
@echo " Installing minio binary to ' $( GOPATH) /bin/minio' "
2024-05-27 15:17:46 -04:00
@mkdir -p $( GOPATH) /bin && cp -af $( PWD) /minio $( GOPATH) /bin/minio
2018-02-13 23:59:19 -05:00
@echo "Installation successful. To learn more, try \"minio --help\"."
2014-11-01 20:04:24 -04:00
2021-10-01 14:53:06 -04:00
clean : ## cleanup all generated assets
2017-06-02 17:05:51 -04:00
@echo "Cleaning up all the generated files"
2016-02-10 19:40:09 -05:00
@find . -name '*.test' | xargs rm -fv
2019-02-13 07:59:36 -05:00
@find . -name '*~' | xargs rm -fv
2022-07-21 10:25:54 -04:00
@find . -name '.#*#' | xargs rm -fv
@find . -name '#*#' | xargs rm -fv
2018-02-13 23:59:19 -05:00
@rm -rvf minio
@rm -rvf build
@rm -rvf release
2020-04-01 03:04:25 -04:00
@rm -rvf .verify*
2023-11-30 18:25:51 -05:00
@rm -rvf minio-release
@rm -rvf minio.RELEASE*.hotfix.*
@rm -rvf pkger_*.deb