BS(1)                       General Commands Manual                      BS(1)



NAME
       bs - build software

SYNOPSIS
       bs  [  -V | --version ] [ -v | --verbose | -d level | --debug=level ] [
       -h | --help ] [ -p | --paths ] [ -n | --simulate ] [ -f file  |  --con-
       fig=file  ]  [  -k  |  --no-desandboxing  ] [ --no-sequencing ] [ --de-
       lay-fail ] step module

DESCRIPTION
       Bs is a tool to perform the steps of the development cycles of programs
       and Debian packages.

       It  takes  two  arguments; step to specify the cycle (program or Debian
       package) and the step of that cycle (prologue, schedule release,  test,
       release, make tarball/package, epilogue) and module to specify the name
       of the program or Debian package. The  steps  and  their  meanings  are
       listed below.

       Familiarity  with  the  development and release cycles for programs and
       Debian packages is useful.

STEPS
       The steps of the program development cycle are these, listed in the or-
       der in which they are to be called:

       prologue-sources, ps
              Run   the   user-written   script  specified  by  the  SITE_PRO-
              LOGUE_SOURCES_CMD configuration  variable.  This  script  should
              perform  all  the  actions  necessary to bring module to a state
              where the program developer can enter the normal program  devel-
              opment  cycle  (starting  with the schedule-sources step). It is
              expected that this script should: create the  module  directory,
              populate  it with a minimal set of source files, archive it in a
              Subversion repository (see svn(1)) and  immediately  retrieve  a
              copy of the program sources from the repository.

       schedule-sources, ss
              Schedule a new release.

       test-sources, ts
              Test  the  sources.  This  means:  run some standard tests (e.g.
              check the program sources are uptodate  with  respect  to  their
              Subversion  repository),  run module's regression test suite and
              attempt to make the tarball.

       release-sources, rs
              Release the sources. This means: repeat  the  test-sources  step
              but  tolerate no errors or warnings, finalise the ChangeLog and,
              in  the  Subversion  repository,  copy  module/trunk   to   mod-
              ule/tags/release-id.

       make-tarball, mt
              Make the tarball and upload it.

       epilogue-sources, es
              Run   the   user-written   script  specified  by  the  SITE_EPI-
              LOGUE_SOURCES_CMD configuration variable.

       After running the above steps, the program  developer  should  normally
       wait  for  an external event (e.g. a bug report or the release of a new
       version of a prerequisite library) and then repeat the cycle  from  the
       schedule-sources step.

       The  steps of the Debian package development cycle are these, listed in
       the order in which they are to be called:

       prologue-pkgctrl, pp
              Run the user-written script specified by the SITE_PROLOGUE_PKGC-
              TRL_CMD  configuration  variable. This script should perform all
              the actions necessary to bring module.debian module to  a  state
              where  the Debian package developer can enter the normal program
              development cycle (starting with the schedule-pkgctrl step).  It
              is  expected  that  this script should: create the module.debian
              directory, populate it with a minimal set of Debian package con-
              trol  files,  archive  it in a Subversion repository and immedi-
              ately retrieve a copy of the Debian package control  files  from
              the repository.

       schedule-pkgctrl, sp
              Schedule a new release.

       test-pkgctrl, tp
              Test  the  Debian  package  control  files. This means: run some
              standard tests (e.g. check the Debian package control files  are
              uptodate  with respect to their Subversion repository), make the
              Debian package (and in so doing  run  module's  regression  test
              suite) and make the Debian package.

       release-pkgctrl, rp
              Release the Debian package control files. This means: repeat the
              test-pkgctrl step but tolerate no errors or  warnings,  finalise
              the  changelog  (see  dch(1)) and, in the Subversion repository,
              copy module.debian/trunk to module.debian/tags/release-id.

       make-package, mp
              Make the Debian package and upload it.

       epilogue-pkgctrl, ep
              Run the user-written script specified by the SITE_EPILOGUE_PKGC-
              TRL_CMD  configuration variable. It is expected that this script
              insert the Debian package into a Debian package repository (per-
              haps using paa(1)).

       After running the above steps, the Debian package developer should nor-
       mally wait for an external event (e.g. a bug report or the release of a
       new  version of the program sources) and then repeat the cycle from the
       schedule-pkgctrl step.

       In addition, there are the following steps available:

       status Report the last successfully completed program source and Debian
              package development steps.

CONFIGURATION
       Many  variables  need to be set in the configuration file. See the com-
       ments in /usr/share/doc/bs/examples/bs.conf for details.

OPTIONS
       -d level, --debug=level  Determines how verbose this program  will  be.
                                The  message types displayed for the different
                                values of level are as follows: 0 displays  no
                                messages;  1  displays only errors, 2 displays
                                errors and warnings; 3 displays errors,  warn-
                                ings and informational messages; higher values
                                display errors, warnings,  informational  mes-
                                sages and various messages intended for debug-
                                ging.  The default is 2.

       -h, --help               Displays a brief usage message.

       -p, --paths              Lists the compiled-in paths of  various  files
                                and  directories  that this program uses.  -n,
                                --simulate Some external  commands  that  this
                                program  runs may be displayed rather than ac-
                                tually executed.  BEWARE:  different  programs
                                implement  different  levels of simulation; so
                                this option may work perfectly; on  the  other
                                hand it may do nothing at all!

       -v, --verbose            Equivalent to -d 3.

       -V, --version            Prints the program's version number and exits.

       -f file, --config=file   Set  the configuration file. If this option is
                                not  used  then  the  file  specified  by  the
                                BS_CONFIG environment variable is used and, if
                                that is not set, a hard-coded default is  used
                                (see ENVIRONMENT and FILES below).

       -k, --no-desandboxing    Do  not  delete  the  sandbox  after use; this
                                might be useful in  diagnosing  problems  with
                                the build.

       --delay-fail             When  step  is  test-sources  or test-pkgctrl,
                                then bs exits at the end  of  any  test  phase
                                that raises an error, i.e. it does not proceed
                                to the next test phase.  This  option  changes
                                that  behaviour so that bs does proceed to the
                                next text phase and only raises an error  when
                                all  test phases have been executed.  This op-
                                tion is intended to aid debugging errors  that
                                only  manifest  themselves deep in bs's execu-
                                tion stack.

       --no-sequencing          Do not enforce step sequencing restrictions.

EXIT STATUS
       On success bs returns zero. On failure it returns non-zero and displays
       a diagnostic message.

FILES
       /etc/bs/bs.conf Default configuration file

ENVIRONMENT VARIABLES
       BS_CONFIG                Specifies the configuration file.

EXAMPLES
       In this example session, we create a new program 'foo' and package it.

       We  base  the  configuration on the example configuration file included
       with bs, but use a new local Subversion repository and keep our working
       copies in ~/dev:

              user$ cp /usr/share/doc/bs/examples/bs.conf ~/etc/
              user$ export BS_CONFIG=~/etc/bs.conf
              user$ svnadmin create ~/var/svnrepo
              user$ echo SOURCES_REPOSITORY_URL_PREFIX=file://~/var/svnrepo \
                  >> ~/etc/bs.conf
              user$ echo PKGCTRL_REPOSITORY_URL_PREFIX=file://~/var/svnrepo \
                  >> ~/etc/bs.conf
              user$ echo SOURCES_WORKINGCOPY_DIR_PREFIX=~/dev >> ~/etc/bs.conf
              user$ echo PKGCTRL_WORKINGCOPY_DIR_PREFIX=~/dev >> ~/etc/bs.conf

       We  create the 'foo' program sources using the example prologue-sources
       script included with bs (this particular example script uses  adegmt(1)
       to  generate the module, complete with man pages and a basic regression
       test suite.  Adegmt(1) needs to be told the name of a template  module,
       so the script prompts for this information):

              user$ bs ps foo
              template: lxshell

       At  this  point we have a fully functional 'foo' program source tree in
       the Subversion repository and in ~/dev.

       Immediately, we submit a bug report stating that the program  does  not
       do  what  it is supposed to do.  It may seem odd to submit a bug report
       even before the program sources have been written but  it  reduces  the
       amount of effort that is outside of the development cycle and therefore
       not subject to the cycle's control, its checks and its logging.  Let us
       suppose that this bug report is assigned the ID 'FOO#001'.

       We announce our intent to fix this bug by scheduling a new release:

              user$ bs ss foo
              bug ID []: FOO#001
              bump type (b)ug, (f)eature or (r)ewrite [b]:

       We test the program sources:

              user$ bs ts foo
              M       foo/doc/ChangeLog
              foo/doc/Makefile: no keywords property
              foo/man/Makefile: no keywords property
              foo/man/foo-config.1: no keywords property
              ...
              ?       foo/bin/foo
              ?       foo/bin/foo-config
              ?       foo/bin/foodevsh
              ...

       The  error  messages  above relate to missing Subversion properties and
       the automated modification of the ChangeLog made by the previous  step;
       these  are fixed by using svn pset svn:keywords and svn pset svn:ignore
       and then committing all changes back to the repository:

              user$ svn commit -qm "  * first proper version" foo

       If we repeat the tests then no errors are shown:

              user$ bs ts foo

       Now we are free to release the sources and make the tarball:

              user$ bs rs foo
              user$ bs mt foo
              user$ ls -l /pub/computing/software/local/sources/localpublic
              -rw-r--r-- 1 alexis alexis    11964 Jan 16 11:25 foo-0.tar.gz

       (Note that the initial release number is 0.)

       Now that the sources have been released, we take off our program devel-
       oper hat and put on our package developer hat.

       We create the 'foo' Debian package control files using the example pro-
       logue-pkgctrl script included with bs:

              user$ bs pp foo

       Immediately, we submit a bug report stating that the package  does  not
       do  what  it is supposed to do.  It may seem odd to submit a bug report
       even before the package control files have been written but it  reduces
       the  amount  of  effort  that  is  outside of the development cycle and
       therefore not subject to its control, its checks and its logging.   Let
       us suppose that this bug report is assigned the ID 'FOOPKG#001'.

       We  announce  our intent to fix this bug by scheduling a new release of
       the package:

              user$ bs sp foo
              schedule-pkgctrl: WARNING: don't forget to update the changelog
                  (it's got dummy text in)

       We test the program sources:

              user$ bs tp foo
              M       /home/alexis/dev/def/foo.debian/changelog
              /home/alexis/dev/def/foo.debian/watch: no keywords property
              /home/alexis/dev/def/foo.debian/rules: no keywords property
              E: foo: description-is-dh_make-template
              E: foo: section-is-dh_make-template
              W: foo: superfluous-clutter-in-homepage <insert the upstream URL
                  if relevant>
              ...

       The error messages above relate to missing Subversion  properties,  the
       automated  modification  of the ChangeLog made by the previous step and
       lintian(1) errors; these are fixed by using svn pset  svn:keywords  and
       svn pset svn:ignore, fixing the lintian errors (the nature and descrip-
       tion of which is outside the scope of this document) and  then  commit-
       ting all changes back to the repository:

              user$ svn commit -qm "  * correct svn keywords" foo.debian

       If we repeat the tests then no errors are shown:

              user$ bs tp foo

       Now  we  are  free to release the Debian package control files and make
       the package:

              user$ bs rp foo
              user$ bs mp foo
              user$ ls -l /pub/computing/software/local/debian/localpublic.queue/
              -rw-r--r-- 1 alexis alexis 5384 Jan 16 11:43 foo_0-2_all.deb

       The make-package step puts the package in a directory specified by  the
       configuration  file  but  it does not regenerate any repository control
       files. The example epilogue-package file does that:

              root# bs -f ~user/etc/bs.conf ep foo

       (Note that, in this example, this step is run  as  root,  necessitating
       the  use of the -f option or the temporary setting of the BS_CONFIG en-
       vironment variable.)

CAVEATS
       None.

STANDARDS
       This manual page documents version 3.1.4 of bs.

SEE ALSO
       adegmt(1), bs-config(1), cp(1), dch(1),  echo(1),  lintian(1),  paa(1),
       svn(1), svnadmin(1)

AUTHOR
       Alexis Huxley <alexishuxley@gmail.com>

COPYRIGHT & DISTRIBUTION POLICY
       Copyright (C) 2011-2025 Alexis Huxley

       This program is free software; you can redistribute it and/or modify it
       under the terms of the GNU General Public License as published  by  the
       Free  Software Foundation; either version 2 of the License, or (at your
       option) any later version.

       This program is distributed in the hope that it  will  be  useful,  but
       WITHOUT  ANY  WARRANTY;  without  even  the  implied  warranty  of MER-
       CHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU  General
       Public License for more details.

       You should have received a copy of the GNU General Public License along
       with this program; if not, write to the Free Software Foundation, Inc.,
       675 Mass Ave, Cambridge, MA 02139, USA.



                                  29 Apr 2025                            BS(1)