From 0d5745308da263d7553bef7ad577e8d06d99f2d2 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Tue, 3 Jan 2017 18:23:44 +0100 Subject: [PATCH 1/4] Add "make package" target --- .gitignore | 3 +++ .gitlab-ci.yml | 13 ++++++++++++ Makefile | 3 +++ _package/Gemfile | 5 +++++ _package/Gemfile.lock | 48 +++++++++++++++++++++++++++++++++++++++++++ _package/package | 37 +++++++++++++++++++++++++++++++++ 6 files changed, 109 insertions(+) create mode 100644 _package/Gemfile create mode 100644 _package/Gemfile.lock create mode 100755 _package/package diff --git a/.gitignore b/.gitignore index 15e82f96f23..8485277d1e5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,6 @@ /_build /gitaly /gitaly-client +/*.deb +/_package/bin +/_package/.bundle/ diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 04addd180b9..d373a31aeaf 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,3 +4,16 @@ test: script: - make - make test + +package: + script: + - apt-get update -qq + - apt-get install -qq -y rubygems ruby2.1 bundler + - GOOS=linux GOARCH=amd64 make clean package + - dpkg -e *.deb + - cat DEBIAN/control + - cat DEBIAN/md5sums + - rm -rf DEBIAN + artifacts: + paths: + - ./*.deb diff --git a/Makefile b/Makefile index 023b39753ef..29ea25e4e80 100644 --- a/Makefile +++ b/Makefile @@ -26,6 +26,9 @@ test: clean-build ${BUILD_DIR}/_build fmt fmt: _support/gofmt-all -n | awk '{ print } END { if (NR > 0) { print "Please run _support/gofmt-all -f"; exit 1 } }' +package: build + ./_package/package ${CMDS} + clean: clean-build rm -rf client/testdata rm -f $(foreach cmd,${CMDS},./${cmd}) diff --git a/_package/Gemfile b/_package/Gemfile new file mode 100644 index 00000000000..cf5bae70ec1 --- /dev/null +++ b/_package/Gemfile @@ -0,0 +1,5 @@ +# frozen_string_literal: true +# A sample Gemfile +source 'https://rubygems.org' + +gem 'fpm' diff --git a/_package/Gemfile.lock b/_package/Gemfile.lock new file mode 100644 index 00000000000..9eac985a84b --- /dev/null +++ b/_package/Gemfile.lock @@ -0,0 +1,48 @@ +GEM + remote: https://rubygems.org/ + specs: + archive-tar-minitar (0.5.2) + arr-pm (0.0.10) + cabin (> 0) + backports (3.6.8) + cabin (0.9.0) + childprocess (0.5.9) + ffi (~> 1.0, >= 1.0.11) + clamp (1.0.1) + dotenv (2.1.1) + ffi (1.9.14) + fpm (1.8.0) + archive-tar-minitar + arr-pm (~> 0.0.10) + backports (>= 2.6.2) + cabin (>= 0.6.0) + childprocess + clamp (~> 1.0.0) + ffi + json (>= 1.7.7, < 2.0) + pleaserun (~> 0.0.24) + ruby-xz + insist (1.0.0) + io-like (0.3.0) + json (1.8.3) + mustache (0.99.8) + pleaserun (0.0.27) + cabin (> 0) + clamp + dotenv + insist + mustache (= 0.99.8) + stud + ruby-xz (0.2.3) + ffi (~> 1.9) + io-like (~> 0.3) + stud (0.0.22) + +PLATFORMS + ruby + +DEPENDENCIES + fpm + +BUNDLED WITH + 1.12.5 diff --git a/_package/package b/_package/package new file mode 100755 index 00000000000..0dc811aed2e --- /dev/null +++ b/_package/package @@ -0,0 +1,37 @@ +#!/usr/bin/env ruby + +NAME = 'gitaly' +VERSION = IO.popen(%w[git describe]) { |io| io.read }.chomp.split('v', 2)[1] +ARCHITECTURE = 'amd64' +PREFIX = '/usr/local' +VENDOR = 'GitLab Inc.' +MAINTAINER = VENDOR +LICENSE = 'MIT' +URL = 'https://gitlab.com/gitlab-org/gitaly' + +PACKAGE_DIR = File.dirname(__FILE__) + +def main(args) + run!(%w[bundle install --quiet --binstubs], PACKAGE_DIR) + fpm = %W[ + #{PACKAGE_DIR}/bin/fpm -t deb -m #{MAINTAINER} --vendor #{VENDOR} --license #{LICENSE} + --url #{URL} -s dir -n #{NAME} -v #{VERSION} -a #{ARCHITECTURE} + ] + fpm += args.map { |arg| "#{arg}=#{PREFIX}/bin/" } + fpm << "NOTICE=usr/share/doc/#{NAME}/" + run!(fpm, '.') +end + +def run!(cmd, dir) + if ! system(*cmd, chdir: dir) + abort "command failed: #{cmd.join(' ')}" + end +end + +abort "VERSION cannot be empty" if VERSION.empty? + +if ARGV.empty? + abort "Usage: #{$0} EXECUTABLE [EXECUTABLE...]" +end + +main(ARGV) -- GitLab From c24cef1ff94dfbb3be9f7ff3e7d3504d042fa071 Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Fri, 13 Jan 2017 19:32:25 -0500 Subject: [PATCH 2/4] Add stages and publish job --- .gitlab-ci.yml | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d373a31aeaf..638f9002622 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,14 +1,23 @@ image: golang:1.7 +stages: + - test + - package + - publish + test: + stage: test script: - make - make test package: + stage: package + only: + - tags script: - apt-get update -qq - - apt-get install -qq -y rubygems ruby2.1 bundler + - apt-get install -qq -y rubygems bundler - GOOS=linux GOARCH=amd64 make clean package - dpkg -e *.deb - cat DEBIAN/control @@ -17,3 +26,17 @@ package: artifacts: paths: - ./*.deb + +publish: + stage: publish + only: + - tags + variables: + GIT_STRATEGY: none + script: + - apt-get update -qq + - apt-get install -y rubygems + - gem install package_cloud + - ls -lh *.deb + - shasum -a256 *.deb + - package_cloud push $PACKAGECLOUD_REPO *.deb --url=https://packages.gitlab.com -- GitLab From ccb663da9c47cad5e310ac2f516c152d3c1ab22c Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Fri, 13 Jan 2017 21:24:47 -0500 Subject: [PATCH 3/4] Add description --- _package/package | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_package/package b/_package/package index 0dc811aed2e..07a9dac5947 100755 --- a/_package/package +++ b/_package/package @@ -1,6 +1,7 @@ #!/usr/bin/env ruby NAME = 'gitaly' +DESCRIPTION = 'Gitaly (part of GitLab). Experimental build for testing only.' VERSION = IO.popen(%w[git describe]) { |io| io.read }.chomp.split('v', 2)[1] ARCHITECTURE = 'amd64' PREFIX = '/usr/local' @@ -15,7 +16,7 @@ def main(args) run!(%w[bundle install --quiet --binstubs], PACKAGE_DIR) fpm = %W[ #{PACKAGE_DIR}/bin/fpm -t deb -m #{MAINTAINER} --vendor #{VENDOR} --license #{LICENSE} - --url #{URL} -s dir -n #{NAME} -v #{VERSION} -a #{ARCHITECTURE} + --url #{URL} -s dir -n #{NAME} -v #{VERSION} -a #{ARCHITECTURE} --description #{DESCRIPTION} ] fpm += args.map { |arg| "#{arg}=#{PREFIX}/bin/" } fpm << "NOTICE=usr/share/doc/#{NAME}/" -- GitLab From 9448387058005ccb8c9bbf7315237b3014b8525e Mon Sep 17 00:00:00 2001 From: Jacob Vosmaer Date: Fri, 13 Jan 2017 21:57:11 -0500 Subject: [PATCH 4/4] Force file permissions before fpm --- .gitlab-ci.yml | 1 + _package/package | 2 ++ 2 files changed, 3 insertions(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 638f9002622..d165681d789 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -19,6 +19,7 @@ package: - apt-get update -qq - apt-get install -qq -y rubygems bundler - GOOS=linux GOARCH=amd64 make clean package + - ls -l # Want to see permissions as they went into the .deb - dpkg -e *.deb - cat DEBIAN/control - cat DEBIAN/md5sums diff --git a/_package/package b/_package/package index 07a9dac5947..cc9ef8cab16 100755 --- a/_package/package +++ b/_package/package @@ -14,6 +14,8 @@ PACKAGE_DIR = File.dirname(__FILE__) def main(args) run!(%w[bundle install --quiet --binstubs], PACKAGE_DIR) + File.chmod(0755, *args) + File.chmod(0644, 'NOTICE') fpm = %W[ #{PACKAGE_DIR}/bin/fpm -t deb -m #{MAINTAINER} --vendor #{VENDOR} --license #{LICENSE} --url #{URL} -s dir -n #{NAME} -v #{VERSION} -a #{ARCHITECTURE} --description #{DESCRIPTION} -- GitLab