summaryrefslogtreecommitdiff
path: root/texinfo/onboarding.texi
diff options
context:
space:
mode:
Diffstat (limited to 'texinfo/onboarding.texi')
-rw-r--r--texinfo/onboarding.texi663
1 files changed, 663 insertions, 0 deletions
diff --git a/texinfo/onboarding.texi b/texinfo/onboarding.texi
new file mode 100644
index 00000000..0ae99b39
--- /dev/null
+++ b/texinfo/onboarding.texi
@@ -0,0 +1,663 @@
+\input texinfo @c -*-texinfo-*-
+@c %**start of header
+@setfilename onboarding.info
+@documentencoding UTF-8
+@ifinfo
+@*Generated by Sphinx 2.2.0.@*
+@end ifinfo
+@settitle Taler Onboarding Manual
+@defindex ge
+@paragraphindent 0
+@exampleindent 4
+@finalout
+@dircategory CATEGORY
+@direntry
+* MENU ENTRY: (onboarding.info). DESCRIPTION
+@end direntry
+
+@definfoenclose strong,`,'
+@definfoenclose emph,`,'
+@c %**end of header
+
+@copying
+@quotation
+GNU Taler 0.6.0pre1, Sep 18, 2019
+
+GNU Taler team
+
+Copyright @copyright{} 2014, 2015, 2016 Florian Dold, Benedikt Muller, Sree Harsha Totakura, Christian Grothoff, Marcello Stanisci (GPLv3+ or GFDL 1.3+)
+@end quotation
+
+@end copying
+
+@titlepage
+@title Taler Onboarding Manual
+@insertcopying
+@end titlepage
+@contents
+
+@c %** start of user preamble
+
+@c %** end of user preamble
+
+@ifnottex
+@node Top
+@top Taler Onboarding Manual
+@insertcopying
+@end ifnottex
+
+@c %**start of body
+@anchor{onboarding doc}@anchor{0}
+@menu
+* Taler installation::
+* Building the documentation::
+* Building the Websites.: Building the Websites.
+* Code coverage.: Code coverage.
+* Online services checker.: Online services checker.
+* Topping the tip reserve up::
+* Producing auditor reports::
+* Releases::
+* Code::
+* Bugtracking::
+* Continuous integration::
+* Code coverage: Code coverage<2>.
+* Appendix::
+
+@detailmenu
+ --- The Detailed Node Listing ---
+
+Taler installation
+
+* User Acccounts::
+* Compile and switch color.: Compile and switch color.
+* Full bootstrap.: Full bootstrap.
+* How to upgrade the code.: How to upgrade the code.
+
+Releases
+
+* Release Process and Checklists::
+* Tagging::
+* Database for tests::
+* Exchange@comma{} merchant: Exchange merchant.
+* Wallet WebExtension::
+* Upload to GNU mirrors::
+
+Appendix
+
+* Testing library::
+
+@end detailmenu
+@end menu
+
+@node Taler installation,Building the documentation,Top,Top
+@anchor{onboarding developer-onboarding-manual}@anchor{1}@anchor{onboarding taler-installation}@anchor{2}
+@chapter Taler installation
+
+
+This section describes the GNU Taler deployment on @code{gv.taler.net}.
+
+@menu
+* User Acccounts::
+* Compile and switch color.: Compile and switch color.
+* Full bootstrap.: Full bootstrap.
+* How to upgrade the code.: How to upgrade the code.
+
+@end menu
+
+@node User Acccounts,Compile and switch color,,Taler installation
+@anchor{onboarding user-acccounts}@anchor{3}
+@section User Acccounts
+
+
+On @code{gv.taler.net}, there are four users that are set up to serve Taler on
+the internet:
+
+
+@itemize -
+
+@item
+@code{taler-test}: serves @code{*.test.taler.net} and gets automatically
+built by Buildbot.
+
+@item
+@code{taler-internal}: serves @code{*.int.taler.net}, and does @emph{NOT} get
+automatically built.
+@end itemize
+
+The following two users are @emph{never} automatically built, and they both
+serve @code{*.demo.taler.net}. At any given time, only one is active and
+serves the HTTP requests from the outside; the other one can so be
+compiled without any downtime. If the compilation succeeds, the inactive
+user can be switched to become active (see next section), and vice versa.
+
+
+@itemize -
+
+@item
+@code{demo-blue}
+
+@item
+@code{demo-green}
+@end itemize
+
+@node Compile and switch color,Full bootstrap,User Acccounts,Taler installation
+@anchor{onboarding compile-and-switch-color}@anchor{4}
+@section Compile and switch color.
+
+
+If the setup is already bootstrapped, then it should only be needed to
+login as ’demo-X’ (with X being the inactive color); and then:
+
+@example
+$ source activate
+$ taler-deployment-build
+@end example
+
+and then switch the color by logging in as the @emph{demo} user, and switch
+the color with the following command:
+
+@example
+$ taler-deployment-switch-demo-X
+@end example
+
+@node Full bootstrap,How to upgrade the code,Compile and switch color,Taler installation
+@anchor{onboarding full-bootstrap}@anchor{5}
+@section Full bootstrap.
+
+
+In order to bootstrap a Taler installation under a empty home directory,
+do:
+
+@example
+$ cd $HOME
+$ git clone git://git.taler.net/deployment
+@end example
+
+Then run the prepare script that will (1) download all the repositories
+(2) build the codebases, (3) configure the system, and (4) generate the
+needed data.
+
+
+@table @asis
+
+@item ::
+
+$ ./deployment/bin/taler-deployment-prepare [test | int | demo]
+@end table
+
+
+@quotation
+
+@strong{Note}
+
+If the DB schema of merchant/exchange/auditor changed, at this point
+it MIGHT be necessary to reset all the tables. To this regard,
+consider running one of the following commands:
+
+@example
+# To reset the merchant DB.
+$ taler-merchant-dbinit -r
+
+# To reset the exchange DB.
+$ taler-exchange-dbinit -r
+
+# To reset the exchange DB.
+$ taler-auditor-dbinit -r
+@end example
+@end quotation
+
+If all the steps succeeded, then it should be possible to launch all the
+services. Give:
+
+@example
+$ taler-deployment-start
+
+# or restart, if you want to kill old processes and
+# start new ones.
+$ taler-deployment-restart
+@end example
+
+Verify that all services are up and running:
+
+@example
+$ taler-deployment-arm -I
+$ tail logs/<component>-<date>.log
+@end example
+
+@node How to upgrade the code,,Full bootstrap,Taler installation
+@anchor{onboarding how-to-upgrade-the-code}@anchor{6}
+@section How to upgrade the code.
+
+
+Some repositories, especially the ones from the released components,
+have a @emph{stable} branch, that keeps older and more stable code.
+Therefore, upon each release we must rebase those stable branches on the
+master.
+
+The following commands do that:
+
+@example
+$ cd $REPO
+
+$ git pull origin master stable
+$ git checkout stable
+
+# option a: resolve conflicts resulting from hotfixes
+$ git rebase master
+$ ...
+
+# option b: force stable to master
+$ git update-ref refs/heads/stable master
+
+$ git push # possibly with --force
+
+# continue development
+$ git checkout master
+@end example
+
+@node Building the documentation,Building the Websites,Taler installation,Top
+@anchor{onboarding building-the-documentation}@anchor{7}@anchor{onboarding testing-components}@anchor{8}
+@chapter Building the documentation
+
+
+All the Taler documentation is built by the user @cite{docbuilder} that
+runs a Buildbot worker. The following commands set the @cite{docbuilder} up,
+starting with a empty home directory.
+
+
+@table @asis
+
+@item ::
+
+# Log-in as the 'docbuilder' user.
+
+$ cd $HOME
+$ git clone git://git.taler.net/deployment
+$ ./deployment/bootstrap-docbuilder
+
+# If the previous step worked, the setup is
+# complete and the Buildbot worker can be started.
+
+$ buildbot-worker start worker/
+@end table
+
+@node Building the Websites,Code coverage,Building the documentation,Top
+@anchor{onboarding building-the-websites}@anchor{9}
+@chapter Building the Websites.
+
+
+Taler Websites, @cite{www.taler.net} and @cite{stage.taler.net}, are built by the
+user @cite{taler-websites} by the means of a Buildbot worker. The following
+commands set the @cite{taler-websites} up, starting with a empty home directory.
+
+
+@table @asis
+
+@item ::
+
+# Log-in as the 'taler-websites' user.
+
+$ cd $HOME
+$ git clone git://git.taler.net/deployment
+$ ./deployment/bootstrap-sitesbuilder
+
+# If the previous step worked, the setup is
+# complete and the Buildbot worker can be started.
+
+$ buildbot-worker start worker/
+@end table
+
+@node Code coverage,Online services checker,Building the Websites,Top
+@anchor{onboarding code-coverage}@anchor{a}
+@chapter Code coverage.
+
+
+Code coverage tests are run by the @cite{lcovworker} user, and are also driven
+by Buildbot.
+
+@example
+# Log-in as the 'lcovworker' user.
+
+$ cd $HOME
+$ git clone git://git.taler.net/deployment
+$ ./deployment/bootstrap-taler lcov
+
+# If the previous step worked, the setup is
+# complete and the Buildbot worker can be started.
+
+$ buildbot-worker start worker/
+@end example
+
+The results are then published at @cite{https://lcov.taler.net/}.
+
+@node Online services checker,Topping the tip reserve up,Code coverage,Top
+@anchor{onboarding online-services-checker}@anchor{b}
+@chapter Online services checker.
+
+
+The user @cite{demo-checker} runs periodic checks to see if all the
+@cite{*.demo.taler.net} services are up and running. It is driven by
+Buildbot, and can be bootstrapped as follows.
+
+@example
+# Log-in as the 'demo-checker' user
+
+$ cd $HOME
+$ git clone git://git.taler.net/deployment
+$ ./deployment/bootstrap-demochecker
+
+# If the previous step worked, the setup is
+# complete and the Buildbot worker can be started.
+
+$ buildbot-worker start worker/
+@end example
+
+@node Topping the tip reserve up,Producing auditor reports,Online services checker,Top
+@anchor{onboarding topping-the-tip-reserve-up}@anchor{c}
+@chapter Topping the tip reserve up
+
+
+Both 'test' and 'demo' setups get their tip reserve topped up
+by a Buildbot worker. The following steps get the reserve topper
+prepared.
+
+
+@table @asis
+
+@item ::
+
+# Log-in as <env>-topper, with <env> being either 'test' or 'demo'
+
+$ git clone git://git.taler.net/deployment
+$ ./deployment/prepare-reservetopper <env>
+
+# If the previous steps worked, then it should suffice to start
+# the worker, with:
+
+$ buildbot-worker start worker/
+@end table
+
+@node Producing auditor reports,Releases,Topping the tip reserve up,Top
+@anchor{onboarding producing-auditor-reports}@anchor{d}
+@chapter Producing auditor reports
+
+
+Both 'test' and 'demo' setups get their auditor reports compiled
+by a Buildbot worker. The following steps get the reports compiler
+prepared.
+
+
+@table @asis
+
+@item ::
+
+# Log-in as <env>-auditor, with <env> being either 'test' or 'demo'
+
+$ git clone git://git.taler.net/deployment
+$ ./deployment/prepare-auditorreporter <env>
+
+# If the previous steps worked, then it should suffice to start
+# the worker, with:
+
+$ buildbot-worker start worker/
+@end table
+
+@node Releases,Code,Producing auditor reports,Top
+@anchor{onboarding id1}@anchor{e}@anchor{onboarding releases}@anchor{f}
+@chapter Releases
+
+
+@menu
+* Release Process and Checklists::
+* Tagging::
+* Database for tests::
+* Exchange@comma{} merchant: Exchange merchant.
+* Wallet WebExtension::
+* Upload to GNU mirrors::
+
+@end menu
+
+@node Release Process and Checklists,Tagging,,Releases
+@anchor{onboarding release-process-and-checklists}@anchor{10}
+@section Release Process and Checklists
+
+
+This document describes the process for releasing a new version of the
+various Taler components to the official GNU mirrors.
+
+The following components are published on the GNU mirrors
+
+
+@itemize -
+
+@item
+taler-exchange (exchange.git)
+
+@item
+taler-merchant (merchant.git)
+
+@item
+talerdonations (donations.git)
+
+@item
+talerblog (blog.git)
+
+@item
+taler-bank (bank.git)
+
+@item
+taler-wallet-webex (wallet-webex.git)
+@end itemize
+
+@node Tagging,Database for tests,Release Process and Checklists,Releases
+@anchor{onboarding tagging}@anchor{11}
+@section Tagging
+
+
+Tag releases with an @strong{annotated} commit, like
+
+@example
+git tag -a v0.1.0 -m "Official release v0.1.0"
+git push origin v0.1.0
+@end example
+
+@node Database for tests,Exchange merchant,Tagging,Releases
+@anchor{onboarding database-for-tests}@anchor{12}
+@section Database for tests
+
+
+For tests in the exchange and merchant to run, make sure that a database
+@emph{talercheck} is accessible by @emph{$USER}. Otherwise tests involving the
+database logic are skipped.
+
+@node Exchange merchant,Wallet WebExtension,Database for tests,Releases
+@anchor{onboarding exchange-merchant}@anchor{13}
+@section Exchange, merchant
+
+
+Set the version in @code{configure.ac}. The commit being tagged should be
+the change of the version.
+
+For the exchange test cases to pass, @code{make install} must be run first.
+Without it, test cases will fail because plugins can’t be located.
+
+@example
+./bootstrap
+./configure # add required options for your system
+make dist
+tar -xf taler-$COMPONENT-$VERSION.tar.gz
+cd taler-$COMPONENT-$VERSION
+make install check
+@end example
+
+@node Wallet WebExtension,Upload to GNU mirrors,Exchange merchant,Releases
+@anchor{onboarding wallet-webextension}@anchor{14}
+@section Wallet WebExtension
+
+
+The version of the wallet is in @emph{manifest.json}. The @code{version_name}
+should be adjusted, and @emph{version} should be increased independently on
+every upload to the WebStore.
+
+@example
+./configure
+make dist
+@end example
+
+@node Upload to GNU mirrors,,Wallet WebExtension,Releases
+@anchor{onboarding upload-to-gnu-mirrors}@anchor{15}
+@section Upload to GNU mirrors
+
+
+See
+@emph{https://www.gnu.org/prep/maintain/maintain.html#Automated-FTP-Uploads}
+
+Directive file:
+
+@example
+version: 1.2
+directory: taler
+filename: taler-exchange-0.1.0.tar.gz
+@end example
+
+Upload the files in @strong{binary mode} to the ftp servers.
+
+@node Code,Bugtracking,Releases,Top
+@anchor{onboarding code}@anchor{16}@anchor{onboarding id2}@anchor{17}
+@chapter Code
+
+
+Taler code is versioned via Git. For those users without write access,
+all the codebases are found at the following URL:
+
+@example
+git://git.taler.net/<repository>
+@end example
+
+A complete list of all the existing repositories is currently found at
+@code{https://git.taler.net/}. Note: @code{<repository>} must NOT have the
+@code{.git} extension.
+
+@node Bugtracking,Continuous integration,Code,Top
+@anchor{onboarding bugtracking}@anchor{18}@anchor{onboarding id3}@anchor{19}
+@chapter Bugtracking
+
+
+Bug tracking is done with Mantis (@indicateurl{https://www.mantisbt.org/}). All the
+bugs are then showed and managed at @code{https://bugs.gnunet.org/}, under
+the "Taler" project. A registration on the Web site is needed in order
+to use the bug tracker.
+
+@node Continuous integration,Code coverage<2>,Bugtracking,Top
+@anchor{onboarding continuous-integration}@anchor{1a}@anchor{onboarding id4}@anchor{1b}
+@chapter Continuous integration
+
+
+CI is done with Buildbot (@indicateurl{https://buildbot.net/}), and builds are
+triggered by the means of Git hooks. The results are published at
+@code{https://buildbot.wild.gv.taler.net/}.
+
+In order to avoid downtimes, CI uses a "blue/green" deployment
+technique. In detail, there are two users building code on the system,
+the "green" and the "blue" user; and at any given time, one is running
+Taler services and the other one is either building the code or waiting
+for that.
+
+There is also the possibility to trigger builds manually, but this is
+only reserved to "admin" users.
+
+@node Code coverage<2>,Appendix,Continuous integration,Top
+@anchor{onboarding id5}@anchor{1c}@anchor{onboarding id6}@anchor{1d}
+@chapter Code coverage
+
+
+Code coverage is done with the Gcov / Lcov
+(@indicateurl{http://ltp.sourceforge.net/coverage/lcov.php}) combo, and it is run
+*nightly* (once a day) by a Buildbot worker. The coverage results are
+then published at @code{https://lcov.taler.net/}.
+
+@node Appendix,,Code coverage<2>,Top
+@anchor{onboarding appendix}@anchor{1e}
+@chapter Appendix
+
+
+@menu
+* Testing library::
+
+@end menu
+
+@node Testing library,,,Appendix
+@anchor{onboarding testing-library}@anchor{1f}
+@section Testing library
+
+
+This chapter is a VERY ABSTRACT description of how testing is
+implemented in Taler, and in NO WAY wants to substitute the reading of
+the actual source code by the user.
+
+In Taler, a test case is a array of @code{struct TALER_TESTING_Command},
+informally referred to as @code{CMD}, that is iteratively executed by the
+testing interpreter. This latter is transparently initiated by the
+testing library.
+
+However, the developer does not have to defined CMDs manually, but
+rather call the proper constructor provided by the library. For example,
+if a CMD is supposed to test feature @code{x}, then the library would
+provide the @code{TALER_TESTING_cmd_x ()} constructor for it. Obviously,
+each constructor has its own particular arguments that make sense to
+test @code{x}, and all constructor are thoroughly commented within the
+source code.
+
+Internally, each CMD has two methods: @code{run ()} and @code{cleanup ()}. The
+former contains the main logic to test feature @code{x}, whereas the latter
+cleans the memory up after execution.
+
+In a test life, each CMD needs some internal state, made by values it
+keeps in memory. Often, the test has to @emph{share} those values with other
+CMDs: for example, CMD1 may create some key material and CMD2 needs this
+key material to encrypt data.
+
+The offering of internal values from CMD1 to CMD2 is made by @emph{traits}. A
+trait is a @code{struct TALER_TESTING_Trait}, and each CMD contains a array
+of traits, that it offers via the public trait interface to other
+commands. The definition and filling of such array happens transparently
+to the test developer.
+
+For example, the following example shows how CMD2 takes an amount object
+offered by CMD1 via the trait interface.
+
+Note: the main interpreter and the most part of CMDs and traits are
+hosted inside the exchange codebase, but nothing prevents the developer
+from implementing new CMDs and traits within other codebases.
+
+@example
+/* Withouth loss of generality, let's consider the
+ * following logic to exist inside the run() method of CMD1 */
+..
+
+struct TALER_Amount *a;
+/**
+ * the second argument (0) points to the first amount object offered,
+ * in case multiple are available.
+ */
+if (GNUNET_OK != TALER_TESTING_get_trait_amount_obj (cmd2, 0, &a))
+ return GNUNET_SYSERR;
+...
+
+use(a); /* 'a' points straight into the internal state of CMD2 */
+@end example
+
+In the Taler realm, there is also the possibility to alter the behaviour
+of supposedly well-behaved components. This is needed when, for example,
+we want the exchange to return some corrupted signature in order to
+check if the merchant backend detects it.
+
+This alteration is accomplished by another service called @emph{twister}. The
+twister acts as a proxy between service A and B, and can be programmed
+to tamper with the data exchanged by A and B.
+
+Please refer to the Twister codebase (under the @code{test} directory) in
+order to see how to configure it.
+
+@c %**end of body
+@bye