Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create deb/rpm package for Linux release #11

Merged
merged 11 commits into from Aug 25, 2015
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
10 changes: 9 additions & 1 deletion .travis.yml
@@ -1,18 +1,26 @@
sudo: false
language: go
go:
- 1.3
env: PATH=/home/travis/gopath/bin:$PATH
install:
- go get github.com/laher/goxc
- sudo apt-get update
- DEBIAN_FRONTEND=noninteractive sudo apt-get install -y rpm devscripts debhelper
- mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
script:
- goxc -t
- make all
after_success:
- script/travis/autotag.sh
before_deploy:
- make rpm deb
deploy:
provider: releases
api_key:
secure: K7cIFoRCn4DrmSysTtyul14WJdY858y6MQM5hzTcIZrQnCXZZUVaBoNt7U7IiS/5rj41hiDT4635SiSxl/BIgahsUVVgzL7VRieMb5DRzjiWc8VfqmYlLwkGudaUt2FidlbuRuAHJF2PpdOTrMELJnTq4/Pva2/LkObrTAG2uok=
file:
- "/home/travis/rpmbuild/RPMS/noarch/mkr-0.4.0-1.noarch.rpm"
- "/home/travis/gopath/src/github.com/mackerelio/mkr/packaging/mkr_0.4.0-1_all.deb"
- "/home/travis/gopath/src/github.com/mackerelio/mkr/snapshot/mkr_linux_amd64"
- "/home/travis/gopath/src/github.com/mackerelio/mkr/snapshot/mkr_linux_386"
- "/home/travis/gopath/src/github.com/mackerelio/mkr/snapshot/mkr_darwin_amd64"
Expand Down
14 changes: 13 additions & 1 deletion Makefile
Expand Up @@ -25,14 +25,26 @@ cross: deps
cp -p $(PWD)/snapshot/darwin_amd64/mkr $(PWD)/snapshot/mkr_darwin_amd64
cp -p $(PWD)/snapshot/darwin_386/mkr $(PWD)/snapshot/mkr_darwin_386

rpm:
GOOS=linux GOARCH=386 make build
rpmbuild --define "_builddir `pwd`" -ba packaging/rpm/mkr.spec

deb:
GOOS=linux GOARCH=386 make build
cp $(BIN) packaging/deb/debian/$(BIN).bin
cd packaging/deb && debuild --no-tgz-check -rfakeroot -uc -us

deps:
go get -d -v .

testdeps:
go get -d -v -t .

release:
script/releng

clean:
rm -fr build
go clean

.PHONY: test build cross lint deps testdeps clean
.PHONY: test build cross lint deps testdeps clean deb rpm release
2 changes: 2 additions & 0 deletions packaging/deb/debian/README.Debian
@@ -0,0 +1,2 @@
mkr for Debian
-------------------------
5 changes: 5 additions & 0 deletions packaging/deb/debian/changelog
@@ -0,0 +1,5 @@
mkr (0.4.0-1) stable; urgency=low

* first release for debian

-- Sixeight <sixeight@hatena.ne.jp> Fri, 14 Aug 2015 15:58:44 +0900
1 change: 1 addition & 0 deletions packaging/deb/debian/compat
@@ -0,0 +1 @@
9
11 changes: 11 additions & 0 deletions packaging/deb/debian/control
@@ -0,0 +1,11 @@
Source: mkr
Section: admin
Priority: extra
Maintainer: Hatena
Build-Depends: debhelper (>= 9)
Standards-Version: 3.9.4
Homepage: https://mackerel.io

Package: mkr
Architecture: all
Description: macekrel.io api client tool
11 changes: 11 additions & 0 deletions packaging/deb/debian/copyright
@@ -0,0 +1,11 @@
Copyright:

<Copyright (C) 2015 Hatena>

License:

Apache-2.0

The Debian packaging is:

Copyright (C) 2015 Hatena <developers@mackerel.io>
14 changes: 14 additions & 0 deletions packaging/deb/debian/rules
@@ -0,0 +1,14 @@
#!/usr/bin/make -f
# -*- makefile -*-

%:
dh $@

package=mkr

override_dh_auto_install:
dh_auto_install
install -d -m 755 debian/${package}/usr/local/bin/
install -m 655 debian/${package}.bin debian/${package}/usr/local/bin/${package}

override_dh_usrlocal:
9 changes: 9 additions & 0 deletions packaging/docker/deb/Dockerfile
@@ -0,0 +1,9 @@
FROM debian:wheezy
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update
RUN apt-get -y install build-essential devscripts debhelper fakeroot --no-install-recommends

WORKDIR /deb/build
ENTRYPOINT ["debuild"]

4 changes: 4 additions & 0 deletions packaging/docker/golang/Dockerfile
@@ -0,0 +1,4 @@
FROM golang:1.4.2

WORKDIR /go/src/github.com/mackerelio/mkr

8 changes: 8 additions & 0 deletions packaging/docker/rpm/Dockerfile
@@ -0,0 +1,8 @@
FROM centos:centos7

RUN yum update -y && yum install -y rpmdevtools

ADD rpmmacros /root/.rpmmacros

WORKDIR /rpm
ENTRYPOINT ["/usr/bin/rpmbuild"]
6 changes: 6 additions & 0 deletions packaging/docker/rpm/rpmmacros
@@ -0,0 +1,6 @@
%_topdir /rpm
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS
11 changes: 11 additions & 0 deletions packaging/docker/src/Dockerfile
@@ -0,0 +1,11 @@
FROM debian:jessie
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get -y update && apt-get -y install git gnupg

RUN mkdir -p /go/src/github.com/mackerelio/mkr

RUN mkdir -p /rpm /deb/build
RUN mkdir -p /rpm/BUILD /rpm/RPMS /rpm/SOURCES /rpm/SPECS /rpm/SRPMS

VOLUME ["/go/src/github.com/mackerelio/mkr", "/rpm", "/deb"]
90 changes: 90 additions & 0 deletions packaging/package.sh
@@ -0,0 +1,90 @@
#! /bin/sh

set -ex

DOCKER=${DOCKER:-"docker"}

PACKAGE=${PACKAGE:-"mkr"}

IMAGE_SRC="hatena/mkr_src"
IMAGE_GO="hatena/mkr_golang"
IMAGE_DEB="hatena/mkr_deb"
IMAGE_RPM="hatena/mkr_rpm"

NAME="mkr"
REPOSITORY_DIR="/go/src/github.com/mackerelio/mkr"

# UNIXTIME to ignore cache
UNIXTIME=$(date '+%s')
DATA_VOLUME_CONTAINER=${DATA_VOLUME_CONTAINER:-"$PACKAGE-src-$UNIXTIME"}

function build_all_image() {
(cd packaging/docker/src && $DOCKER build -t $IMAGE_SRC .)
(cd packaging/docker/golang && $DOCKER build -t $IMAGE_GO .)
(cd packaging/docker/deb && $DOCKER build -t $IMAGE_DEB .)
(cd packaging/docker/rpm && $DOCKER build -t $IMAGE_RPM .)
}

function build_container() {
$DOCKER run --name $DATA_VOLUME_CONTAINER -v /Users/Sixeight/local/go/src/github.com/mackerelio/mkr:/go/src/github.com/mackerelio/mkr $IMAGE_SRC
}

function clean_containers() {
$DOCKER rm $DATA_VOLUME_CONTAINER
}

function src_run() {
$DOCKER run --rm --volumes-from $DATA_VOLUME_CONTAINER debian:jessie $@
}

function go_run() {
$DOCKER run --rm --volumes-from $DATA_VOLUME_CONTAINER $IMAGE_GO $@
}

function debuild_run() {
$DOCKER run --rm --volumes-from $DATA_VOLUME_CONTAINER $IMAGE_DEB $@
}

function rpmbuild_run() {
$DOCKER run --rm --volumes-from $DATA_VOLUME_CONTAINER $IMAGE_RPM $@
}

function debian_run_info() {
echo "$DOCKER run -it --rm --volumes-from $DATA_VOLUME_CONTAINER debian:jessie /bin/bash"
}

function centos_run_info() {
echo "$DOCKER run -it --rm --volumes-from $DATA_VOLUME_CONTAINER centos:centos7 /bin/bash"
}

function prepare() {
build_all_image
build_container
}

function build() {
go_run make clean build
}

function deb() {
src_run cp -r $REPOSITORY_DIR/packaging/deb/debian/ /deb/build/debian
src_run cp $REPOSITORY_DIR/$NAME /deb/build/debian/$NAME.bin
debuild_run --no-tgz-check -uc -us
}

function rpm() {
src_run cp -r $REPOSITORY_DIR/packaging/rpm/$NAME.spec /rpm/SPECS/$NAME.spec
src_run cp $REPOSITORY_DIR/$NAME /rpm/BUILD/$NAME
rpmbuild_run -ba /rpm/SPECS/$NAME.spec
}

function main() {
prepare
build
deb
rpm
debian_run_info
centos_run_info
}

main
46 changes: 46 additions & 0 deletions packaging/rpm/mkr.spec
@@ -0,0 +1,46 @@
# sudo yum -y install rpmdevtools go && rpmdev-setuptree
# rpmbuild -ba ~/rpmbuild/SPECS/mkr.spec

%define _binaries_in_noarch_packages_terminate_build 0
%define _localbindir /usr/local/bin

Name: mkr
Version: 0.4.0
Release: 1
License: Apache-2.0
Summary: macekrel.io api client tool
URL: https://mackerel.io
Group: Hatena
Packager: Hatena
BuildArch: noarch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
macekrel.io api client tool

%prep

%build

%install
rm -rf %{buildroot}
install -d -m 755 %{buildroot}/%{_localbindir}
install -m 655 %{_builddir}/%{name} %{buildroot}/%{_localbindir}
install -d -m 755 %{buildroot}/%{_localstatedir}/log/

%clean
rm -f %{buildroot}%{_bindir}/${name}

%pre

%post

%preun

%files
%defattr(-,root,root)
%{_localbindir}/%{name}

%changelog
* Fri Aug 14 2015 <sixeight@hatena.ne.jp> - 0.4.0-1
- first release for rpm
101 changes: 101 additions & 0 deletions script/autotag
@@ -0,0 +1,101 @@
#!/usr/bin/env perl

=head DESCRIPTION

Automatically `git tag` by travisCI.

When the pull request is merged and the branch name is like "bump-version-N.N.N",
the merge commit is automatically tagged as `vN.N.N`.

original: https://github.com/mackerelio/mackerel-agent/blob/v0.20.1/tool/autotag

=head SYNOPSIS

% tool/autotag

=cut

use 5.014;
use warnings;

use HTTP::Tiny;
use JSON::PP;

my $OWNER = 'mackerelio';
my $REPO = 'mkr';

sub get_branch_from_msg {
my $msg = shift;

my ($pr_num, $branch) = $msg =~ /^[a-f0-9]{7} Merge pull request #([0-9]+) from (.*)$/;
return unless $pr_num;

my $res = HTTP::Tiny->new->get(
sprintf 'https://api.github.com/repos/%s/%s/pulls/%d?state=closed', $OWNER, $REPO, $pr_num
);
unless ($res->{success}) {
warn 'API request failed'; return;
}
my $data = decode_json $res->{content};
my $label = $data->{head}{label};
$label =~ s!:!/!; # $user:branch/name -> $user/branch/name

if ($label ne $branch) {
return;
}
($data->{head}{ref}, $data->{title}, $data->{body});
}

sub tag_name_from_branch {
my $branch = shift;

my ($tag) = $branch =~ m!^bump-version-([0-9]+(?:\.[0-9]+){2})$!;
$tag && "v$tag";
}

### main
if (!$ENV{HARNESS_ACTIVE}) {
main();
} else {
# When called via `prove`, tests will run.
run_tests();
}

sub main {
# e.g. 492764e Merge pull request #3 from Songmu/fix/remote
chomp(my $msg = `git log HEAD~.. --merges --oneline`);
unless ($msg) {
say 'not a merged commit'; return;
}

my ($branch, $title, $body) = get_branch_from_msg($msg);
unless ($branch) {
say 'not a pull request'; return;
}
my $tag = tag_name_from_branch($branch);
unless ($tag) {
say 'not a autotag target'; return;
}

my %tags = map { chomp; ($_ => 1) } `git tag`;
if ($tags{$tag}) {
say "tag: $tag already tagged"; return;
}
system(qw/git tag -a/, $tag, '-m', "$title\n\n$body");
system(qw/git push --tags/);
}

sub run_tests {
require Test::More;
Test::More->import;

my ($branch) = get_branch_from_msg('58a535b Merge pull request #44 from naokibtn/feature-munin');
is($branch, 'feature-munin');
($branch) = get_branch_from_msg('86b6a58 Merge pull request #36 from mackerelio/bump-version-0.5.0');
is($branch, 'bump-version-0.5.0');

is(tag_name_from_branch('bump-version-0.5.0'), 'v0.5.0');
ok(!tag_name_from_branch('feature-hoge'));

done_testing();
}