John Little
John Little

Reputation: 12403

How to edit "Version: xxx" from a script to automate a debian package build?

The Debian control file has a line like this (among many others):

  Version: 1.1.0

We are using jenkins to build our application as a .deb package. in Jenkins we are doing something like this:

 cp -r $WORKSPACE/p1.1/ourap/scripts/ourapp_debian $TARGET/
 cd $TARGET
 fakeroot dpkg-deb --build ourapp_debian

We would like to do shomething like this in our control file:

 Packages: ourapp
 Version: 1.1.$BUILD_NUMBER

but obviously this is not possible.

So we need something like a sed script to find the line starting with Version: and replace anything after it with a constant plus the BUILD_NUMBER env var which Jenkins creates.

We have tried things like this:

$ sed -i 's/xxx/$BUILD_NUMBER/g' control

then put "Version: xxx" in our file, but this doesn't work, and there must be a better way?

Any ideas?

We don't use the change-log, as this package will be installed on servers which no one has access to. the change logs are word docs given to the customer. We don't use or need any of the Debian helper tools.

Upvotes: 0

Views: 279

Answers (2)

jijinp
jijinp

Reputation: 2672

With single quote:

sed -ri "s/(Version.*\.)[0-9]*/\1$BUILD_NUMBER/g" <control file>

OR

sed  -ni  "/Version/{s/[0-9]*$/$BUILD_NUMBER/};p" <control file>

Upvotes: 1

slitvinov
slitvinov

Reputation: 5768

Create two files:

f.awk

function vp(s) { # return 1 for a string with version info
    return s ~ /[ \t]*Version:/
}

function upd() { # an example of version number update function
    v[3] = ENVIRON["BUILD_NUMBER"]
}

vp($0) {
    gsub("[^.0-9]", "") # get rid of everything but `.' and digits
    split($0, v, "[.]") # split version info into array `v' elements

    upd()

    printf "Version: %s.%s.%s\n", v[1], v[2], v[3]
    next # done with this line
}

{ # print the rest without modifications
    print 
}

f.example

rest1
Version: 1.1.0
rest2

Run the command

BUILD_NUMBER=42 awk -f f.awk f.example

Expected output is

rest1
Version: 1.1.42
rest2

Upvotes: 1

Related Questions