Split package target into per platform (#17692)

Currently the `package` make target handles all three platforms -
Windows, OSX and Linux. While doing it in surprisingly serial mode.

Split it up in 3, so that things are a bit faster and people can package
only what they need.

v2: Rebase (platform was removed)

Signed-off-by: Emil Velikov <emil.velikov@collabora.com>

Co-authored-by: Emil Velikov <emil.velikov@collabora.com>
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
Этот коммит содержится в:
Emil Velikov
2021-07-19 13:35:21 +01:00
коммит произвёл GitHub
родитель 40d9735f64
Коммит a78a7c7b54
2 изменённых файлов: 54 добавлений и 49 удалений

Просмотреть файл

@@ -1,4 +1,4 @@
.PHONY: build package run stop run-client run-server run-haserver stop-haserver stop-client stop-server restart restart-server restart-client restart-haserver start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows internal-test-web-client vet run-server-for-web-client-tests diff-config prepackaged-plugins prepackaged-binaries test-server test-server-ee test-server-quick test-server-race start-docker-check migrations-bindata new-migration migration-prereqs
.PHONY: build package run stop run-client run-server run-haserver stop-haserver stop-client stop-server restart restart-server restart-client restart-haserver start-docker clean-dist clean nuke check-style check-client-style check-server-style check-unit-tests test dist prepare-enteprise run-client-tests setup-run-client-tests cleanup-run-client-tests test-client build-linux build-osx build-windows package-prep package-linux package-osx package-windows internal-test-web-client vet run-server-for-web-client-tests diff-config prepackaged-plugins prepackaged-binaries test-server test-server-ee test-server-quick test-server-race start-docker-check migrations-bindata new-migration migration-prereqs
ROOT := $(dir $(abspath $(lastword $(MAKEFILE_LIST))))
@@ -94,6 +94,9 @@ PLATFORM_FILES="./cmd/mattermost/main.go"
# Output paths
DIST_ROOT=dist
DIST_PATH=$(DIST_ROOT)/mattermost
DIST_PATH_LIN=$(DIST_ROOT)/linux/mattermost
DIST_PATH_OSX=$(DIST_ROOT)/osx/mattermost
DIST_PATH_WIN=$(DIST_ROOT)/windows/mattermost
# Tests
TESTS=.

Просмотреть файл

@@ -63,16 +63,11 @@ build-client:
cd $(BUILD_WEBAPP_DIR) && $(MAKE) build
package:
package-prep:
@ echo Packaging mattermost
@# Remove any old files
rm -Rf $(DIST_ROOT)
@# Create needed directories
mkdir -p $(DIST_PATH)/bin
mkdir -p $(DIST_PATH)/logs
mkdir -p $(DIST_PATH)/prepackaged_plugins
@# Resource directories
mkdir -p $(DIST_PATH)/config
cp -L config/README.md $(DIST_PATH)/config
@@ -97,9 +92,6 @@ package:
mkdir -p $(DIST_PATH)/client
cp -RL $(BUILD_WEBAPP_DIR)/dist/* $(DIST_PATH)/client
@#Download MMCTL
scripts/download_mmctl_release.sh "" $(DIST_PATH)/bin
@# Help files
ifeq ($(BUILD_ENTERPRISE_READY),true)
cp $(BUILD_ENTERPRISE_DIR)/ENTERPRISE-EDITION-LICENSE.txt $(DIST_PATH)
@@ -126,103 +118,113 @@ endif
done
@# ----- PLATFORM SPECIFIC -----
package-osx: package-prep
@# Create needed directories
mkdir -p $(DIST_PATH_OSX)/bin
mkdir -p $(DIST_PATH_OSX)/logs
mkdir -p $(DIST_PATH_OSX)/prepackaged_plugins
@# Make osx package
@# Copy binary
ifeq ($(BUILDER_GOOS_GOARCH),"darwin_amd64")
cp $(GOBIN)/mattermost $(DIST_PATH)/bin # from native bin dir, not cross-compiled
cp $(GOBIN)/mattermost $(DIST_PATH_OSX)/bin # from native bin dir, not cross-compiled
else
cp $(GOBIN)/darwin_amd64/mattermost $(DIST_PATH)/bin # from cross-compiled bin dir
cp $(GOBIN)/darwin_amd64/mattermost $(DIST_PATH_OSX)/bin # from cross-compiled bin dir
endif
#Download MMCTL for OSX
scripts/download_mmctl_release.sh "Darwin" $(DIST_PATH)/bin
scripts/download_mmctl_release.sh "Darwin" $(DIST_PATH_OSX)/bin
@# Prepackage plugins
@for plugin_package in $(PLUGIN_PACKAGES) ; do \
ARCH="osx-amd64"; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH_OSX)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_OSX)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH_OSX)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
if [ "$$HAS_ARCH" != "dist/plugin-darwin-amd64" ]; then \
echo "Contains $$HAS_ARCH in $$plugin_package-$$ARCH.tar.gz but needs dist/plugin-darwin-amd64"; \
exit 1; \
fi; \
gpg --verify $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
gpg --verify $(DIST_PATH_OSX)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_OSX)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
if [ $$? -ne 0 ]; then \
echo "Failed to verify $$plugin_package-$$ARCH.tar.gz|$$plugin_package-$$ARCH.tar.gz.sig"; \
exit 1; \
fi; \
done
@# Package
tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-amd64.tar.gz mattermost
tar -C $(DIST_PATH_OSX)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-osx-amd64.tar.gz mattermost ../mattermost
@# Cleanup
rm -f $(DIST_PATH)/bin/mattermost
rm -f $(DIST_PATH)/bin/platform
rm -f $(DIST_PATH)/bin/mmctl
rm -f $(DIST_PATH)/prepackaged_plugins/*
rm -rf $(DIST_PATH_OSX)
package-windows: package-prep
@# Create needed directories
mkdir -p $(DIST_PATH_WIN)/bin
mkdir -p $(DIST_PATH_WIN)/logs
mkdir -p $(DIST_PATH_WIN)/prepackaged_plugins
@# Make windows package
@# Copy binary
ifeq ($(BUILDER_GOOS_GOARCH),"windows_amd64")
cp $(GOBIN)/mattermost.exe $(DIST_PATH)/bin # from native bin dir, not cross-compiled
cp $(GOBIN)/mattermost.exe $(DIST_PATH_WIN)/bin # from native bin dir, not cross-compiled
else
cp $(GOBIN)/windows_amd64/mattermost.exe $(DIST_PATH)/bin # from cross-compiled bin dir
cp $(GOBIN)/windows_amd64/mattermost.exe $(DIST_PATH_WIN)/bin # from cross-compiled bin dir
endif
#Download MMCTL for Windows
scripts/download_mmctl_release.sh "Windows" $(DIST_PATH)/bin
scripts/download_mmctl_release.sh "Windows" $(DIST_PATH_WIN)/bin
@# Prepackage plugins
@for plugin_package in $(PLUGIN_PACKAGES) ; do \
ARCH="windows-amd64"; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH_WIN)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_WIN)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
if [ "$$HAS_ARCH" != "dist/plugin-windows-amd64.exe" ]; then \
echo "Contains $$HAS_ARCH in $$plugin_package-$$ARCH.tar.gz but needs dist/plugin-windows-amd64.exe"; \
exit 1; \
fi; \
gpg --verify $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
gpg --verify $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_WIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
if [ $$? -ne 0 ]; then \
echo "Failed to verify $$plugin_package-$$ARCH.tar.gz|$$plugin_package-$$ARCH.tar.gz.sig"; \
exit 1; \
fi; \
done
@# Package
cd $(DIST_ROOT) && zip -9 -r -q -l mattermost-$(BUILD_TYPE_NAME)-windows-amd64.zip mattermost && cd ..
cd $(DIST_PATH_WIN)/.. && zip -9 -r -q -l ../mattermost-$(BUILD_TYPE_NAME)-windows-amd64.zip mattermost ../mattermost && cd ../..
@# Cleanup
rm -f $(DIST_PATH)/bin/mattermost.exe
rm -f $(DIST_PATH)/bin/platform.exe
rm -f $(DIST_PATH)/bin/mmctl.exe
rm -f $(DIST_PATH)/prepackaged_plugins/*
rm -rf $(DIST_PATH_WIN)
package-linux: package-prep
@# Create needed directories
mkdir -p $(DIST_PATH_LIN)/bin
mkdir -p $(DIST_PATH_LIN)/logs
mkdir -p $(DIST_PATH_LIN)/prepackaged_plugins
@# Make linux package
@# Copy binary
ifeq ($(BUILDER_GOOS_GOARCH),"linux_amd64")
cp $(GOBIN)/mattermost $(DIST_PATH)/bin # from native bin dir, not cross-compiled
cp $(GOBIN)/mattermost $(DIST_PATH_LIN)/bin # from native bin dir, not cross-compiled
else
cp $(GOBIN)/linux_amd64/mattermost $(DIST_PATH)/bin # from cross-compiled bin dir
cp $(GOBIN)/linux_amd64/mattermost $(DIST_PATH_LIN)/bin # from cross-compiled bin dir
endif
#Download MMCTL for Linux
scripts/download_mmctl_release.sh "Linux" $(DIST_PATH)/bin
scripts/download_mmctl_release.sh "Linux" $(DIST_PATH_LIN)/bin
@# Prepackage plugins
@for plugin_package in $(PLUGIN_PACKAGES) ; do \
ARCH="linux-amd64"; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz $(DIST_PATH_LIN)/prepackaged_plugins; \
cp tmpprepackaged/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_LIN)/prepackaged_plugins; \
HAS_ARCH=`tar -tf $(DIST_PATH_LIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz | grep -oE "dist/plugin-.*"`; \
if [ "$$HAS_ARCH" != "dist/plugin-linux-amd64" ]; then \
echo "Contains $$HAS_ARCH in $$plugin_package-$$ARCH.tar.gz but needs dist/plugin-linux-amd64"; \
exit 1; \
fi; \
gpg --verify $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
gpg --verify $(DIST_PATH_LIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz.sig $(DIST_PATH_LIN)/prepackaged_plugins/$$plugin_package-$$ARCH.tar.gz; \
if [ $$? -ne 0 ]; then \
echo "Failed to verify $$plugin_package-$$ARCH.tar.gz|$$plugin_package-$$ARCH.tar.gz.sig"; \
exit 1; \
fi; \
done
@# Package
tar -C dist -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-amd64.tar.gz mattermost
@# Don't clean up native package so dev machines will have an unzipped package available
@#rm -f $(DIST_PATH)/bin/mattermost
tar -C $(DIST_PATH_LIN)/.. -czf $(DIST_PATH)-$(BUILD_TYPE_NAME)-linux-amd64.tar.gz mattermost ../mattermost
@# Preserve native package so dev machines will have an unzipped package available
mv $(DIST_PATH_LIN)/bin $(DIST_PATH)/bin
@# Cleanup
rm -rf $(DIST_PATH_LIN)
package: package-osx package-windows package-linux
rm -rf tmpprepackaged
rm -rf dist/mattermost
rm -rf $(DIST_PATH)