mirror of https://github.com/grafana/grafana
Merge pull request #16071 from xlson/include-build-container
build: migrates the build container into the main repo.pull/16084/head
commit
2ca8d17874
@ -0,0 +1,114 @@ |
|||||||
|
FROM ubuntu:14.04 as toolchain |
||||||
|
|
||||||
|
ENV OSX_SDK_URL=https://s3.dockerproject.org/darwin/v2/ \ |
||||||
|
OSX_SDK=MacOSX10.10.sdk \ |
||||||
|
OSX_MIN=10.10 \ |
||||||
|
CTNG=1.23.0 |
||||||
|
|
||||||
|
# FIRST PART |
||||||
|
# build osx64 toolchain (stripped of man documentation) |
||||||
|
# the toolchain produced is not self contained, it needs clang at runtime |
||||||
|
# |
||||||
|
# SECOND PART |
||||||
|
# build gcc (no g++) centos6-x64 toolchain |
||||||
|
# doc: https://crosstool-ng.github.io/docs/ |
||||||
|
# apt-get should be all dep to build toolchain |
||||||
|
# sed and 1st echo are for convenience to get the toolchain in /tmp/x86_64-centos6-linux-gnu |
||||||
|
# other echo are to enable build by root (crosstool-NG refuse to do that by default) |
||||||
|
# the last 2 rm are just to save some time and space writing docker layers |
||||||
|
# |
||||||
|
# THIRD PART |
||||||
|
# build fpm and creates a set of deb from gem |
||||||
|
# ruby2.0 depends on ruby1.9.3 which is install as default ruby |
||||||
|
# rm/ln are here to change that |
||||||
|
# created deb depends on rubygem-json but json gem is not build |
||||||
|
# so do by hand |
||||||
|
|
||||||
|
|
||||||
|
# might wanna make sure osx cross and the other tarball as well as the packages ends up somewhere other than tmp |
||||||
|
# might also wanna put them as their own layer to not have to unpack them every time? |
||||||
|
|
||||||
|
RUN apt-get update && \ |
||||||
|
apt-get install -y \ |
||||||
|
clang-3.8 patch libxml2-dev \ |
||||||
|
ca-certificates \ |
||||||
|
curl \ |
||||||
|
git \ |
||||||
|
make \ |
||||||
|
xz-utils && \ |
||||||
|
git clone https://github.com/tpoechtrager/osxcross.git /tmp/osxcross && \ |
||||||
|
curl -L ${OSX_SDK_URL}/${OSX_SDK}.tar.xz -o /tmp/osxcross/tarballs/${OSX_SDK}.tar.xz && \ |
||||||
|
ln -s /usr/bin/clang-3.8 /usr/bin/clang && \ |
||||||
|
ln -s /usr/bin/clang++-3.8 /usr/bin/clang++ && \ |
||||||
|
ln -s /usr/bin/llvm-dsymutil-3.8 /usr/bin/dsymutil && \ |
||||||
|
UNATTENDED=yes OSX_VERSION_MIN=${OSX_MIN} /tmp/osxcross/build.sh && \ |
||||||
|
rm -rf /tmp/osxcross/target/SDK/${OSX_SDK}/usr/share && \ |
||||||
|
cd /tmp && \ |
||||||
|
tar cfJ osxcross.tar.xz osxcross/target && \ |
||||||
|
rm -rf /tmp/osxcross && \ |
||||||
|
apt-get install -y \ |
||||||
|
bison curl flex gawk gcc g++ gperf help2man libncurses5-dev make patch python-dev texinfo xz-utils && \ |
||||||
|
curl -L http://crosstool-ng.org/download/crosstool-ng/crosstool-ng-${CTNG}.tar.xz \ |
||||||
|
| tar -xJ -C /tmp/ && \ |
||||||
|
cd /tmp/crosstool-ng-${CTNG} && \ |
||||||
|
./configure --enable-local && \ |
||||||
|
make && \ |
||||||
|
./ct-ng x86_64-centos6-linux-gnu && \ |
||||||
|
sed -i '/CT_PREFIX_DIR=/d' .config && \ |
||||||
|
echo 'CT_PREFIX_DIR="/tmp/${CT_HOST:+HOST-${CT_HOST}/}${CT_TARGET}"' >> .config && \ |
||||||
|
echo 'CT_EXPERIMENTAL=y' >> .config && \ |
||||||
|
echo 'CT_ALLOW_BUILD_AS_ROOT=y' >> .config && \ |
||||||
|
echo 'CT_ALLOW_BUILD_AS_ROOT_SURE=y' >> .config && \ |
||||||
|
./ct-ng build && \ |
||||||
|
cd /tmp && \ |
||||||
|
rm /tmp/x86_64-centos6-linux-gnu/build.log.bz2 && \ |
||||||
|
tar cfJ x86_64-centos6-linux-gnu.tar.xz x86_64-centos6-linux-gnu/ && \ |
||||||
|
rm -rf /tmp/x86_64-centos6-linux-gnu/ && \ |
||||||
|
rm -rf /tmp/crosstool-ng-${CTNG} |
||||||
|
|
||||||
|
# base image to crossbuild grafana |
||||||
|
FROM ubuntu:14.04 |
||||||
|
|
||||||
|
ENV GOVERSION=1.11.5 \ |
||||||
|
PATH=/usr/local/go/bin:$PATH \ |
||||||
|
GOPATH=/go \ |
||||||
|
NODEVERSION=10.14.2 |
||||||
|
|
||||||
|
COPY --from=toolchain /tmp/x86_64-centos6-linux-gnu.tar.xz /tmp/ |
||||||
|
COPY --from=toolchain /tmp/osxcross.tar.xz /tmp/ |
||||||
|
|
||||||
|
RUN apt-get update && \ |
||||||
|
apt-get install -y \ |
||||||
|
clang-3.8 gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf gcc-mingw-w64-x86-64 \ |
||||||
|
apt-transport-https \ |
||||||
|
ca-certificates \ |
||||||
|
curl \ |
||||||
|
libfontconfig1 \ |
||||||
|
gcc \ |
||||||
|
g++ \ |
||||||
|
git \ |
||||||
|
make \ |
||||||
|
rpm \ |
||||||
|
xz-utils \ |
||||||
|
expect \ |
||||||
|
gnupg2 \ |
||||||
|
unzip && \ |
||||||
|
ln -s /usr/bin/clang-3.8 /usr/bin/clang && \ |
||||||
|
ln -s /usr/bin/clang++-3.8 /usr/bin/clang++ && \ |
||||||
|
ln -s /usr/bin/llvm-dsymutil-3.8 /usr/bin/dsymutil && \ |
||||||
|
curl -L https://nodejs.org/dist/v${NODEVERSION}/node-v${NODEVERSION}-linux-x64.tar.xz \ |
||||||
|
| tar -xJ --strip-components=1 -C /usr/local && \ |
||||||
|
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \ |
||||||
|
echo "deb [arch=amd64] https://dl.yarnpkg.com/debian/ stable main" \ |
||||||
|
| tee /etc/apt/sources.list.d/yarn.list && \ |
||||||
|
apt-get update && apt-get install --no-install-recommends yarn && \ |
||||||
|
curl -L https://storage.googleapis.com/golang/go${GOVERSION}.linux-amd64.tar.gz \ |
||||||
|
| tar -xz -C /usr/local |
||||||
|
|
||||||
|
RUN apt-get install -y \ |
||||||
|
gcc libc-dev make && \ |
||||||
|
gpg2 --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB && \ |
||||||
|
curl -sSL https://get.rvm.io | bash -s stable && \ |
||||||
|
/bin/bash -l -c "rvm requirements && rvm install 2.2 && gem install -N fpm" |
||||||
|
|
||||||
|
ADD ./bootstrap.sh /tmp/bootstrap.sh |
||||||
@ -0,0 +1,54 @@ |
|||||||
|
VERSION="dev"
|
||||||
|
TAG="grafana/build-container"
|
||||||
|
USER_ID=$(shell id -u)
|
||||||
|
GROUP_ID=$(shell id -g)
|
||||||
|
|
||||||
|
all: build deploy |
||||||
|
|
||||||
|
build: |
||||||
|
docker build -t "${TAG}:${VERSION}" .
|
||||||
|
|
||||||
|
deploy: |
||||||
|
docker push "${TAG}:${VERSION}"
|
||||||
|
|
||||||
|
run: |
||||||
|
docker run -ti \
|
||||||
|
-e "CIRCLE_BRANCH=local" \
|
||||||
|
-e "CIRCLE_BUILD_NUM=472" \
|
||||||
|
${TAG}:${VERSION} \
|
||||||
|
bash
|
||||||
|
|
||||||
|
run-with-local-source-live: |
||||||
|
docker run -d \
|
||||||
|
-e "CIRCLE_BRANCH=local" \
|
||||||
|
-e "CIRCLE_BUILD_NUM=472" \
|
||||||
|
-w "/go/src/github.com/grafana/grafana" \
|
||||||
|
--name grafana-build \
|
||||||
|
-v "${GOPATH}/src/github.com/grafana/grafana:/go/src/github.com/grafana/grafana" \
|
||||||
|
${TAG}:${VERSION} \
|
||||||
|
bash -c "/tmp/bootstrap.sh; mkdir /.cache; chown "${USER_ID}:${GROUP_ID}" /.cache; tail -f /dev/null"
|
||||||
|
docker exec -ti --user "${USER_ID}:${GROUP_ID}" grafana-build bash
|
||||||
|
|
||||||
|
run-with-local-source-copy: |
||||||
|
docker run -d \
|
||||||
|
-e "CIRCLE_BRANCH=local" \
|
||||||
|
-e "CIRCLE_BUILD_NUM=472" \
|
||||||
|
-w "/go/src/github.com/grafana/grafana" \
|
||||||
|
--name grafana-build \
|
||||||
|
${TAG}:${VERSION} \
|
||||||
|
bash -c "/tmp/bootstrap.sh; tail -f /dev/null"
|
||||||
|
docker cp "${GOPATH}/src/github.com/grafana/grafana" grafana-build:/go/src/github.com/grafana/
|
||||||
|
docker exec -ti grafana-build bash
|
||||||
|
|
||||||
|
update-source: |
||||||
|
docker cp "${GOPATH}/src/github.com/grafana/grafana" grafana-build:/go/src/github.com/grafana/
|
||||||
|
|
||||||
|
attach: |
||||||
|
docker exec -ti grafana-build bash
|
||||||
|
|
||||||
|
attach-live: |
||||||
|
docker exec -ti --user "${USER_ID}:${GROUP_ID}" grafana-build bash
|
||||||
|
|
||||||
|
stop: |
||||||
|
docker kill grafana-build
|
||||||
|
docker rm grafana-build
|
||||||
@ -0,0 +1,20 @@ |
|||||||
|
# grafana-build-container |
||||||
|
Grafana build container |
||||||
|
|
||||||
|
## Description |
||||||
|
|
||||||
|
This is a container for cross-platform builds of Grafana. You can run it locally using the Makefile. |
||||||
|
|
||||||
|
## Makefile targets |
||||||
|
|
||||||
|
* `make run-with-local-source-copy` |
||||||
|
- Starts the container locally and copies your local sources into the container |
||||||
|
* `make run-with-local-source-live` |
||||||
|
- Starts the container (as your user) locally and maps your Grafana project dir into the container |
||||||
|
* `make update-source` |
||||||
|
- Updates the sources in the container from your local sources |
||||||
|
* `make stop` |
||||||
|
- Kills the container |
||||||
|
* `make attach` |
||||||
|
- Opens bash within the running container |
||||||
|
|
||||||
@ -0,0 +1,5 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
cd /tmp |
||||||
|
tar xfJ x86_64-centos6-linux-gnu.tar.xz |
||||||
|
tar xfJ osxcross.tar.xz |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
_version="1.2.3" |
||||||
|
_tag="grafana/build-container:${_version}" |
||||||
|
|
||||||
|
docker build -t $_tag . |
||||||
|
docker push $_tag |
||||||
Loading…
Reference in new issue