diff --git a/.gitignore b/.gitignore index 0fdf9f4d60fe86d44c161a39da1f7b8d1484dd74..29af0728eeb58ac324f2780b4f5f11ac72c90da8 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ vagrant/duniter *.tar.gz *.log *.exe +/release/arch/debian/duniter-source # vscode .vscode diff --git a/release/arch/debian/Vagrantfile b/release/arch/debian/Vagrantfile deleted file mode 100644 index da912f7fbaa6332b1081e4f486ca5e24dc3086ea..0000000000000000000000000000000000000000 --- a/release/arch/debian/Vagrantfile +++ /dev/null @@ -1,72 +0,0 @@ -# -*- mode: ruby -*- -# vi: set ft=ruby : - -# All Vagrant configuration is done below. The "2" in Vagrant.configure -# configures the configuration version (we support older styles for -# backwards compatibility). Please don't change it unless you know what -# you're doing. -Vagrant.configure("2") do |config| - # The most common configuration options are documented and commented below. - # For a complete reference, please see the online documentation at - # https://docs.vagrantup.com. - - # Every Vagrant development environment requires a box. You can search for - # boxes at https://atlas.hashicorp.com/search. - config.vm.box = "https://s3.eu-central-1.amazonaws.com/duniter/vagrant/duniter_trusty64.box" - config.vm.provision :shell, path: "bootstrap.sh" - - # Disable automatic box update checking. If you disable this, then - # boxes will only be checked for updates when the user runs - # `vagrant box outdated`. This is not recommended. - # config.vm.box_check_update = false - - # Create a forwarded port mapping which allows access to a specific port - # within the machine from a port on the host machine. In the example below, - # accessing "localhost:8080" will access port 80 on the guest machine. - # config.vm.network "forwarded_port", guest: 80, host: 8080 - - # Create a private network, which allows host-only access to the machine - # using a specific IP. - # config.vm.network "private_network", ip: "192.168.33.10" - - # Create a public network, which generally matched to bridged network. - # Bridged networks make the machine appear as another physical device on - # your network. - # config.vm.network "public_network" - - # Share an additional folder to the guest VM. The first argument is - # the path on the host to the actual folder. The second argument is - # the path on the guest to mount the folder. And the optional third - # argument is a set of non-required options. - # config.vm.synced_folder "../data", "/vagrant_data" - - # Provider-specific configuration so you can fine-tune various - # backing providers for Vagrant. These expose provider-specific options. - # Example for VirtualBox: - # - config.vm.provider "virtualbox" do |vb| - # Display the VirtualBox GUI when booting the machine - #vb.gui = true - - # Customize the amount of memory on the VM: - vb.memory = "2048" - end - # - # View the documentation for the provider you are using for more - # information on available options. - - # Define a Vagrant Push strategy for pushing to Atlas. Other push strategies - # such as FTP and Heroku are also available. See the documentation at - # https://docs.vagrantup.com/v2/push/atlas.html for more information. - # config.push.define "atlas" do |push| - # push.app = "YOUR_ATLAS_USERNAME/YOUR_APPLICATION_NAME" - # end - - # Enable provisioning with a shell script. Additional provisioners such as - # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the - # documentation for more information about their specific syntax and use. - # config.vm.provision "shell", inline: <<-SHELL - # apt-get update - # apt-get install -y apache2 - # SHELL -end diff --git a/release/arch/debian/bootstrap.sh b/release/arch/debian/bootstrap.sh deleted file mode 100644 index 6666f97b5365f01b41da099362a4e4ae51301e2f..0000000000000000000000000000000000000000 --- a/release/arch/debian/bootstrap.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# Yarn -curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - -echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list - -# System tools -apt-get update -apt-get install --yes git curl build-essential yarn python-minimal zip - -# User installation -sudo su vagrant -c "bash /vagrant/user-bootstrap.sh" diff --git a/release/arch/debian/build-deb.sh b/release/arch/debian/build-deb.sh index 528b044cb93565a64a955afb5e8de84af9f8db60..5d461846885895453e951b67c68c457a87380ad7 100644 --- a/release/arch/debian/build-deb.sh +++ b/release/arch/debian/build-deb.sh @@ -1,7 +1,6 @@ #!/bin/bash # NVM -export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm # Prepare @@ -13,6 +12,7 @@ NW_VERSION=0.24.4 NW_RELEASE="v${NW_VERSION}" NW="nwjs-${NW_RELEASE}-linux-x64" NW_GZ="${NW}.tar.gz" +DUNITER_SRC=/dunidata/duniter-source nvm install ${NVER} nvm use ${NVER} @@ -23,55 +23,37 @@ ROOT=`pwd` DOWNLOADS="$ROOT/downloads" RELEASES="$ROOT/releases" -mkdir -p "$DOWNLOADS" +mkdir -p "$DOWNLOADS" || exit 1 # ----------- -# Clean sources + releases +# Clean up # ----------- -rm -rf "$DOWNLOADS/duniter" -rm -rf "$RELEASES" -rm -rf /vagrant/*.deb -rm -rf /vagrant/*.tar.gz +rm -rf /dunidata/*.deb +rm -rf /dunidata/*.tar.gz # ----------- -# Downloads +# Sources and downloads # ----------- -cd "$DOWNLOADS" - -if [ ! -d "$DOWNLOADS/duniter" ]; then - mv /vagrant/duniter-source duniter - cd duniter - git checkout "v${DUNITER_TAG}" - cd .. -fi - DUNITER_DEB_VER=" $DUNITER_TAG" DUNITER_TAG="v$DUNITER_TAG" -if [ ! -f "$DOWNLOADS/$NW_GZ" ]; then - wget https://dl.nwjs.io/${NW_RELEASE}/${NW_GZ} - tar xvzf ${NW_GZ} -fi +cd "${DUNITER_SRC}" +git checkout "${DUNITER_TAG}" || exit 1 -if [ ! -f "$DOWNLOADS/node-${NVER}-linux-x64.tar.gz" ]; then - # Download Node.js and package it with the sources - wget http://nodejs.org/dist/${NVER}/node-${NVER}-linux-x64.tar.gz - tar xzf node-${NVER}-linux-x64.tar.gz -fi +cd "$DOWNLOADS" +curl -O https://dl.nwjs.io/${NW_RELEASE}/${NW_GZ} || exit 1 +tar xzf ${NW_GZ} || exit 1 +# Download Node.js and package it with the sources +curl -O http://nodejs.org/dist/${NVER}/node-${NVER}-linux-x64.tar.gz || exit 1 +tar xzf node-${NVER}-linux-x64.tar.gz || exit 1 # ----------- # Releases # ----------- -rm -rf "$RELEASES" -mkdir -p "$RELEASES" - -cp -r "$DOWNLOADS/duniter" "$RELEASES/duniter" -cd "$RELEASES" - -# NPM build -cp -r duniter _npm +mkdir -p "$RELEASES" || exit 1 +cp -r "${DUNITER_SRC}" "$RELEASES/duniter" || exit 1 # Releases builds cd ${RELEASES}/duniter @@ -84,41 +66,48 @@ rm -Rf .git [[ $? -eq 0 ]] && npm install duniter-ui@1.6.x [[ $? -eq 0 ]] && npm prune --production -cp -r "$RELEASES/duniter" "$RELEASES/desktop_" -cp -r "$RELEASES/duniter" "$RELEASES/server_" +[[ $? -eq 0 ]] || exit 1 + +cp -r "$RELEASES/duniter" "$RELEASES/desktop_" || exit 1 +cp -r "$RELEASES/duniter" "$RELEASES/server_" || exit 1 # ------------------------------------------------- # Build Desktop version (Nw.js is embedded) # ------------------------------------------------- -cd "$RELEASES/desktop_" echo "$NW_RELEASE" -cd "$RELEASES/desktop_/node_modules/wotb" - # FIX: bug of nw.js, we need to patch first. # TODO: remove this patch once a correct version of Nw.js is out (NodeJS 8 or 9 if the above modules are compliant) -cp /vagrant/0.24.4_common.gypi ~/.nw-gyp/0.24.4/common.gypi +cd "$RELEASES/desktop_/node_modules/wotb" +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure \ + || echo "This failure is expected" +cp /dunidata/0.24.4_common.gypi ~/.nw-gyp/0.24.4/common.gypi || exit 1 +cd "$RELEASES/desktop_/node_modules/wotb" #yarn --build-from-source -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build -cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/wotb.node lib/binding/Release/node-v$ADDON_VERSION-linux-x64/wotb.node +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure || exit 1 +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build || exit 1 +cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/wotb.node \ + lib/binding/Release/node-v$ADDON_VERSION-linux-x64/wotb.node || exit 1 cd "$RELEASES/desktop_/node_modules/naclb" #npm install --build-from-source -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build -cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/naclb.node lib/binding/Release/node-v$ADDON_VERSION-linux-x64/naclb.node +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure || exit 1 +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build || exit 1 +cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/naclb.node \ + lib/binding/Release/node-v$ADDON_VERSION-linux-x64/naclb.node || exit 1 cd "$RELEASES/desktop_/node_modules/scryptb" #npm install --build-from-source -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build -cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/scryptb.node lib/binding/Release/node-v$ADDON_VERSION-linux-x64/scryptb.node +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure || exit 1 +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build || exit 1 +cp lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64/scryptb.node \ + lib/binding/Release/node-v$ADDON_VERSION-linux-x64/scryptb.node || exit 1 cd "$RELEASES/desktop_/node_modules/sqlite3" #npm install --build-from-source -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure -node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build -cp lib/binding/node-webkit-$NW_RELEASE-linux-x64/node_sqlite3.node lib/binding/node-v$ADDON_VERSION-linux-x64/node_sqlite3.node +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION configure || exit 1 +node-pre-gyp --runtime=node-webkit --target=$NW_VERSION build || exit 1 +cp lib/binding/node-webkit-$NW_RELEASE-linux-x64/node_sqlite3.node \ + lib/binding/node-v$ADDON_VERSION-linux-x64/node_sqlite3.node || exit 1 # Unused binaries cd "$RELEASES/desktop_/" @@ -128,39 +117,39 @@ rm -rf node_modules/sqlite3/build #rm -rf node_modules/scryptb/build ## Install Nw.js -mkdir -p "$RELEASES/desktop_release" +mkdir -p "$RELEASES/desktop_release" || exit 1 # ------------------------------------------------- # Build Desktop version .tar.gz # ------------------------------------------------- -cp -r $DOWNLOADS/${NW}/* "$RELEASES/desktop_release/" +cp -r $DOWNLOADS/${NW}/* "$RELEASES/desktop_release/" || exit 1 # Embed Node.js with Nw.js to make Duniter modules installable -cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/lib "$RELEASES/desktop_release/" -cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/include "$RELEASES/desktop_release/" -cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/bin "$RELEASES/desktop_release/" +cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/lib "$RELEASES/desktop_release/" || exit 1 +cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/include "$RELEASES/desktop_release/" || exit 1 +cp -r ${DOWNLOADS}/node-${NVER}-linux-x64/bin "$RELEASES/desktop_release/" || exit 1 # Add some specific files for GUI -cp ${RELEASES}/desktop_/gui/* "$RELEASES/desktop_release/" +cp ${RELEASES}/desktop_/gui/* "$RELEASES/desktop_release/" || exit 1 # Add Duniter sources -cp -R $RELEASES/desktop_/* "$RELEASES/desktop_release/" +cp -R $RELEASES/desktop_/* "$RELEASES/desktop_release/" || exit 1 ## Insert Nw specific fields while they do not exist (1.3.3) -sed -i "s/\"main\": \"index.js\",/\"main\": \"index.html\",/" "$RELEASES/desktop_release/package.json" +sed -i "s/\"main\": \"index.js\",/\"main\": \"index.html\",/" "$RELEASES/desktop_release/package.json" || exit 1 # Add links for Node.js + NPM cd "$RELEASES/desktop_release/bin" -ln -s ../lib/node_modules/npm/bin/npm-cli.js ./npm -f +ln -s ../lib/node_modules/npm/bin/npm-cli.js ./npm -f || exit 1 cd .. -ln -s ./bin/node node -f -ln -s ./bin/npm npm -f +ln -s ./bin/node node -f || exit 1 +ln -s ./bin/npm npm -f || exit 1 #sed -i "s/\"node-main\": \"\.\.\/sources\/bin\/duniter\",/\"node-main\": \".\/bin\/duniter\",/" "$RELEASES/desktop_release/package.json" # Create a copy for TGZ binary -cp -R "$RELEASES/desktop_release" "$RELEASES/desktop_release_tgz" +cp -R "$RELEASES/desktop_release" "$RELEASES/desktop_release_tgz" || exit 1 #cd "$RELEASES/desktop_release_tgz/" #rm -rf node_modules/sqlite3/lib/binding/node-webkit-$NW_RELEASE-linux-x64 #rm -rf node_modules/wotb/lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64 #rm -rf node_modules/naclb/lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64 #rm -rf node_modules/scryptb/lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64 cd "$RELEASES/desktop_release_tgz" -tar czf /vagrant/duniter-desktop-${DUNITER_TAG}-linux-x64.tar.gz * --exclude ".git" --exclude "coverage" --exclude "test" +tar czf /duniter/duniter-desktop-${DUNITER_TAG}-linux-x64.tar.gz * --exclude "coverage" --exclude "test" || exit 1 # ------------------------------------------------- # Build Desktop version .deb @@ -168,11 +157,11 @@ tar czf /vagrant/duniter-desktop-${DUNITER_TAG}-linux-x64.tar.gz * --exclude ".g # Create .deb tree + package it #cp -r "$RELEASES/desktop_release/release/arch/debian/package" "$RELEASES/duniter-x64" -cp -r "/vagrant/package" "$RELEASES/duniter-x64" -mkdir -p "$RELEASES/duniter-x64/opt/duniter/" +cp -r "/dunidata/package" "$RELEASES/duniter-x64" || exit 1 +mkdir -p "$RELEASES/duniter-x64/opt/duniter/" || exit 1 chmod 755 ${RELEASES}/duniter-x64/DEBIAN/post* chmod 755 ${RELEASES}/duniter-x64/DEBIAN/pre* -sed -i "s/Version:.*/Version:$DUNITER_DEB_VER/g" ${RELEASES}/duniter-x64/DEBIAN/control +sed -i "s/Version:.*/Version:$DUNITER_DEB_VER/g" ${RELEASES}/duniter-x64/DEBIAN/control || exit 1 cd ${RELEASES}/desktop_release/ #rm -rf node_modules/sqlite3/lib/binding/node-webkit-$NW_RELEASE-linux-x64 #rm -rf node_modules/wotb/lib/binding/Release/node-webkit-$NW_RELEASE-linux-x64 @@ -182,12 +171,12 @@ cd ${RELEASES}/desktop_release/ #rm -rf node_modules/wotb/lib/binding/Release/node-v$ADDON_VERSION-linux-x64 #rm -rf node_modules/naclb/lib/binding/Release/node-v$ADDON_VERSION-linux-x64 #rm -rf node_modules/scryptb/lib/binding/Release/node-v$ADDON_VERSION-linux-x64 -zip -qr ${RELEASES}/duniter-x64/opt/duniter/duniter-desktop.nw * +zip -qr ${RELEASES}/duniter-x64/opt/duniter/duniter-desktop.nw * || exit 1 -sed -i "s/Package: .*/Package: duniter-desktop/g" ${RELEASES}/duniter-x64/DEBIAN/control +sed -i "s/Package: .*/Package: duniter-desktop/g" ${RELEASES}/duniter-x64/DEBIAN/control || exit 1 cd ${RELEASES}/ -fakeroot dpkg-deb --build duniter-x64 -mv duniter-x64.deb /vagrant/duniter-desktop-${DUNITER_TAG}-linux-x64.deb +fakeroot dpkg-deb --build duniter-x64 || exit 1 +mv duniter-x64.deb /duniter/duniter-desktop-${DUNITER_TAG}-linux-x64.deb || exit 1 # ------------------------------------------------- # Build Server version (Node.js is embedded, not Nw.js) @@ -195,16 +184,16 @@ mv duniter-x64.deb /vagrant/duniter-desktop-${DUNITER_TAG}-linux-x64.deb cd ${RELEASES} rm -rf duniter-server-x64 -cp -r duniter-x64 duniter-server-x64 +cp -r duniter-x64 duniter-server-x64 || exit 1 # Remove Nw.js rm -rf duniter-server-x64/opt/duniter/duniter-desktop.nw* cd ${RELEASES}/server_ -cp -r ${DOWNLOADS}/node-${NVER}-linux-x64 node -zip -qr ${RELEASES}/duniter-server-x64/opt/duniter/duniter-desktop.nw * +cp -r ${DOWNLOADS}/node-${NVER}-linux-x64 node || exit 1 +zip -qr ${RELEASES}/duniter-server-x64/opt/duniter/duniter-desktop.nw * || exit 1 cd ${RELEASES} -sed -i "s/Package: .*/Package: duniter/g" ${RELEASES}/duniter-server-x64/DEBIAN/control +sed -i "s/Package: .*/Package: duniter/g" ${RELEASES}/duniter-server-x64/DEBIAN/control || exit 1 rm -rf ${RELEASES}/duniter-server-x64/usr -fakeroot dpkg-deb --build duniter-server-x64 -mv duniter-server-x64.deb /vagrant/duniter-server-${DUNITER_TAG}-linux-x64.deb +fakeroot dpkg-deb --build duniter-server-x64 || exit 1 +mv duniter-server-x64.deb /duniter/duniter-server-${DUNITER_TAG}-linux-x64.deb || exit 1 diff --git a/release/arch/debian/user-bootstrap.sh b/release/arch/debian/user-bootstrap.sh deleted file mode 100644 index 38df75d12426297d394d40c3113496de092d6718..0000000000000000000000000000000000000000 --- a/release/arch/debian/user-bootstrap.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# NVM -curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash -export NVM_DIR="$HOME/.nvm" -[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm - -# Node.js -nvm install 6 - -# node-pre-gyp -npm install -g nw-gyp node-pre-gyp diff --git a/release/scripts/build.sh b/release/scripts/build.sh index 973cc774326940dc2a6f2a9c2544bc5efd1fcedc..b20ae0e1d6ca9823f4c58a6bb0ff04e9c6524fd9 100755 --- a/release/scripts/build.sh +++ b/release/scripts/build.sh @@ -56,16 +56,13 @@ make) cd .. fi - [[ $? -eq 0 ]] && echo ">> Starting Vagrant Ubuntu VM..." - [[ $? -eq 0 ]] && vagrant up - [[ $? -eq 0 ]] && echo ">> VM: building Duniter..." - [[ $? -eq 0 ]] && vagrant ssh -- "bash -s ${TAG}" < ./build-deb.sh + docker pull duniter/release-builder:17.12.1 + docker run --rm -it -v ${PWD}:/dunidata duniter/release-builder:17.12.1 ${TAG} if [ ! $? -eq 0 ]; then echo ">> Something went wrong. Stopping build." else echo ">> Build success. Shutting the VM down." fi - vagrant halt echo ">> VM closed." else echo "Debian binaries already built. Ready for upload."