Merge ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-impish into ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel

Proposed by Chad Smith
Status: Merged
Approved by: Bryce Harrington
Approved revision: 1ff489a64e18b06c0e10196c3fd49f61963d6f9f
Merge reported by: Chad Smith
Merged at revision: 4da4d2be0e2221686c0935cd9e9e521444af7b46
Proposed branch: ~chad.smith/ubuntu/+source/ubuntu-advantage-tools:release-27-impish
Merge into: ubuntu/+source/ubuntu-advantage-tools:ubuntu/devel
Diff against target: 398 lines (+200/-5) (has conflicts)
10 files modified
.gitignore (+8/-0)
Jenkinsfile (+16/-0)
apt-hook/Makefile (+30/-0)
apt-hook/json-hook-src/go.mod (+4/-0)
apt-hook/json-hook-src/json-hook.go (+42/-0)
apt-hook/json-hook-src/json-hook_test.go (+34/-0)
debian/changelog (+20/-0)
debian/control (+7/-0)
debian/rules (+1/-0)
uaclient/tests/test_util.py (+38/-5)
Conflict in .gitignore
Conflict in Jenkinsfile
Conflict in apt-hook/Makefile
Conflict in apt-hook/json-hook-src/go.mod
Conflict in apt-hook/json-hook-src/json-hook.go
Conflict in apt-hook/json-hook-src/json-hook_test.go
Conflict in debian/changelog
Conflict in debian/control
Conflict in uaclient/tests/test_util.py
Reviewer Review Type Date Requested Status
Bryce Harrington (community) Approve
Grant Orndorff Pending
Lucas Albuquerque Medeiros de Moura Pending
Review via email: mp+401902@code.launchpad.net

Description of the change

Impish new upstream release of ubuntu-advantage-tools 27.0

This is a branch used only as a base for git-ubuntu release of 27.0 of uaclient. It brings all the functionality that we are going to release across ubuntu releases (xenial to hirsute) from our upstream branch https://github.com/canonical/ubuntu-advantage-client/tree/release-27

To recreate this packaging branch:

#!/bin/bash
set -ex
git cherry-pick 140d0ee657d70e22109f17de02f9cc3a3e8df529
git cherry-pick 80b4172fa4dcac4355ab72842d8a9fe082d488fb
git cherry-pick e134dd489aed8ec3cb5f8a5510aaf8eeff1091de
git cherry-pick 985f8d1eb74512c535bbe0f03cd30c3570d6ba2b
git cherry-pick bad262200eb38d23a2885168ad1676503ec538ef
git cherry-pick c76dcf249adb6f300d750408275d9129c5d00a7b
git cherry-pick c6ceeedc536c7144fb5d10463dab5692f2970ef0
git cherry-pick bb3d8928acd4ef7e6091ba2ecf69091b733c2774
# Grab all commits after release-27 branch started
git log b2de092ebeb9480c837048c7551bc50fb3a25377..bb623147c73c2984f75b35e3947595c6027350ce --oneline |egrep -v 'Merge pull|changelog' | awk '{print $1}' > commits

for commit in `tac commits`; do
echo $commit;
git cherry-pick $commit;
done

git log 906d3dfef24e409784d2c050a26be8cbca34abcb..616a5f0c5c950e424434954b6549898e73710ef3 --oneline | grep -v changelog | awk '{print $1}' > commits2
for commit in `tac commits2`; do
echo $commit;
git cherry-pick $commit;
done

git show upstream/release-27:debian/changelog > debian/changelog
git commit -m 'changelog' debian/changelog

To post a comment you must log in.
Revision history for this message
Chad Smith (chad.smith) wrote :

   Propr to release into impish we will follow most of our SRU exception guidelines for testing and verification on lxc. https://wiki.ubuntu.com/UbuntuAdvantageToolsUpdates

To test:
 Since most UA offerings don't actually exist on impish, there is not much to actively test.

Things we need to confirm:
1. the systemd services ua-reboot-cmds and timer ua-messaging are in good
shape and don't affect system boot via systemctl status.
systemctl list-timers --all | grep ua
systemctl status ua-reboot-cmds

2.
Performing ua attach continues to work attach the machine without error (this is only a minor upgrade for impish so shouldn't have degraded).
grab a token for your from https://ubuntu.com/advantage

sudo ua attach <your_TOKEN>
sudo ua status
sudo grep Traceback /var/log/ubuntu-advantage.log

Revision history for this message
Chad Smith (chad.smith) wrote :

Note that functional equivalent bits have been uploaded to https://launchpad.net/~orndorffgrant/+archive/ubuntu/uaclient-staging-27 for hirsute and impish for testing purposes

Revision history for this message
Chad Smith (chad.smith) wrote :

testing verification on this branch using the uaclient-staging-27 PPA above using Hirsute lxc because impish cloud-images not yet available.

$ cat > 27_test_setup.yaml <<EOF
#cloud-config
write_files:
- content: |
    # Ubuntu-Advantage client config file.
    contract_url: 'https://contracts.canonical.com'
    data_dir: /var/lib/ubuntu-advantage
    log_level: debug
    log_file: /var/log/ubuntu-advantage.log
    features:
        allow_beta: true
  owner: root:root
  path: /etc/ubuntu-advantage/uaclient.conf
  permissions: '0644'
apt:
  sources:
    ua_staging_ppa:
        source: 'deb http://ppa.launchpad.net/orndorffgrant/uaclient-staging-27/ubuntu \$RELEASE main'
        keyid: 74E59E9E
packages: [ubuntu-advantage-tools]
EOF

$ lxc launch ubuntu-daily:hirsute test-27-h -c user.user-data="$(cat 27_test_setup.yaml)"
$ lxc exec test-27-h -- cloud-init status --wait --long # wait for pkg installs

status: done
time: Tue, 27 Apr 2021 21:56:38 +0000
detail:
DataSourceNoCloud [seed=/var/lib/cloud/seed/nocloud-net][dsmode=net]

$ lxc exec test-27-h -- ua version
27.0~21.04.1 +allow_beta

$ lxc exec test-27-h -- ua status # show unattached
SERVICE AVAILABLE DESCRIPTION
cc-eal no Common Criteria EAL2 Provisioning Packages
cis no Center for Internet Security Audit Tools
esm-apps no UA Apps: Extended Security Maintenance (ESM)
esm-infra no UA Infra: Extended Security Maintenance (ESM)
fips no NIST-certified FIPS modules
fips-updates no Uncertified security updates to FIPS modules
livepatch no Canonical Livepatch service

This machine is not attached to a UA subscription.
See https://ubuntu.com/advantage

# attach with token from https://ubuntu.com/advantage
$ lxc exec test-27-h -- ua attach <REDACTED>
This machine is now attached to '<email address hidden>'

SERVICE ENTITLED STATUS DESCRIPTION
cc-eal yes n/a Common Criteria EAL2 Provisioning Packages
cis yes n/a Center for Internet Security Audit Tools
esm-apps no — UA Apps: Extended Security Maintenance (ESM)
esm-infra yes n/a UA Infra: Extended Security Maintenance (ESM)
fips yes n/a NIST-certified FIPS modules
fips-updates yes n/a Uncertified security updates to FIPS modules
livepatch yes n/a Canonical Livepatch service

Enable services with: ua enable <service>

     Account: <email address hidden>
Subscription: <email address hidden>

# Assert expected behavior enabling nothing (as there is no support on hirsute or impish)
$ lxc exec test-27-h -- ua enable esm-apps
One moment, checking your subscription first
This subscription is not entitled to UA Apps: ESM
For more information see: https://ubuntu.com/advantage.
$ lxc exec test-27-h -- ua enable esm-infra
One moment, checking your subscription first
UA Infra: ESM is not available for Ubuntu 21.04 (Hirsute Hippo).

root@test-27-h:~# grep Traceback /var/log/ubuntu-advantage.log
root@test-27-h:~#

Revision history for this message
Bryce Harrington (bryce) wrote :

(same feedback from the hirsute mp)

Given that this is essentially a new upstream release, for review purposes I'm going to treat this as an upstream package merge. In other words, rather than a detailed code review I'm mainly going to focus on the packaging changes and integration testing, and assume the main codebase changes have been adequately reviewed and tested already. (The short timeframe we have really doesn't permit a full review anyway.)

However, I did do a cursory review through the 10 commits just to familiarize myself and make sure there's nothing scary. Didn't find anything notable, (other than that this impressively hits four different programming languages!)

I ran into a test failure on initial build which went away after subsequent builds. I'm ignoring that since I couldn't reproduce it, but am noting it in case it comes up again. The issue seemed to involve not recognizing one of the files in lib/ as a python module since there is not a lib/__init__.py. If that crops up anywhere else, it may need adjustment for how it imports the module.

Other than that, the build and test cases all worked fine, and the package installed and upgraded/downgraded without issue.

I did run into a problem trying to use the test case from the SRU bug to reproduce the issue. See
https://pastebin.ubuntu.com/p/WYmK6467NF/. I also tested the libcaca0 package from the original bug report, and that gave similar results. Chad suggested testing against ruby2.7=2.7.2-4ubuntu1 with `ua fix USN-4922-2`, and that worked ok. I gather the metadata provided for CVEs isn't as complete as the metadata provided with USN's. However, it seems like it may be hard to justify this SRU if the original issue is not seen to be fixed by the change... I would suggest changing the test case to one like ruby2.7 that properly demonstrates the bug + fix, and adding a discussion in the SRU text at how this will also work for CVEs once the metadata issue is resolved.

Since the SRU process isn't required for devel versions, I'll go ahead and mark this approved for impish and proceed with uploading.

review: Approve
Revision history for this message
Bryce Harrington (bryce) wrote :
Download full text (9.5 KiB)

Tagged and uploaded for impish:

triage-hirsute+21.04:~/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu$ debuild -S
 dpkg-buildpackage -us -uc -ui -i -I.bzr -I.svn -I.git -S
dpkg-buildpackage: info: source package ubuntu-advantage-tools
dpkg-buildpackage: info: source version 27.0
dpkg-buildpackage: info: source distribution impish
dpkg-buildpackage: info: source changed by Lucas Moura <email address hidden>
 dpkg-source -i -I.bzr -I.svn -I.git --before-build .
 debian/rules clean
dh clean --with python3,bash-completion,systemd --buildsystem=pybuild
dh: warning: Compatibility levels before 10 are deprecated (level 9 in use)
   debian/rules override_dh_auto_clean
make[1]: Entering directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu'
dh_auto_clean
dh_auto_clean: warning: Compatibility levels before 10 are deprecated (level 9 in use)
 pybuild --clean --test-pytest -i python{version} -p 3.9
I: pybuild base:232: python3.9 setup.py clean
running clean
removing '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu/.pybuild/cpython3_3.9/build' (and everything under it)
'build/bdist.linux-x86_64' does not exist -- can't clean it
'build/scripts-3.9' does not exist -- can't clean it
 rm -rf .pybuild/
 find . -name \*.pyc -exec rm {} \;
make clean
make[2]: Entering directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu'
rm -f *.build *.buildinfo *.changes .coverage *.deb *.dsc *.tar.gz *.tar.xz
rm -rf *.egg-info/ .tox/ .cache/ .mypy_cache/
find . -type f -name '*.pyc' -delete
find . -type d -name '*__pycache__' -delete
make -C apt-hook clean
make[3]: Entering directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu/apt-hook'
rm -f hook ubuntu-advantage.pot json-hook-src/json-hook
make[3]: Leaving directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu/apt-hook'
make[2]: Leaving directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu'
make[1]: Leaving directory '/home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu'
   dh_clean -O--buildsystem=pybuild
 rm -f debian/debhelper-build-stamp
 rm -rf debian/.debhelper/
dh_clean: warning: Compatibility levels before 10 are deprecated (level 9 in use)
 rm -f debian/ubuntu-advantage-pro.debhelper.log debian/ubuntu-advantage-tools.debhelper.log
 rm -f -- debian/ubuntu-advantage-tools.substvars debian/ubuntu-advantage-pro.substvars debian/files
 rm -fr -- debian/ubuntu-advantage-tools/ debian/tmp/ debian/ubuntu-advantage-pro/
 find . \( \( \
  \( -path .\*/.git -o -path .\*/.svn -o -path .\*/.bzr -o -path .\*/.hg -o -path .\*/CVS -o -path .\*/.pc -o -path .\*/_darcs \) -prune -o -type f -a \
         \( -name '#*#' -o -name '.*~' -o -name '*~' -o -name DEADJOE \
   -o -name '*.orig' -o -name '*.rej' -o -name '*.bak' \
   -o -name '.*.orig' -o -name .*.rej -o -name '.SUMS' \
   -o -name TAGS -o \( -path '*/.deps/*' -a -name '*.P' \) \
  \) -exec rm -f {} + \) -o \
  \( -type d -a -name autom4te.cache -prune -exec rm -rf {} + \) \)
 dpkg-source -i -I.bzr -I.svn -I.git -b ...

Read more...

Revision history for this message
Bryce Harrington (bryce) wrote :

I've uploaded the new 27.0.1 version with the above changes, to impish:

triage-impish+21.04:~/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu$ git ubuntu tag --upload
triage-impish+21.04:~/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools-gu$ git push pkg upload/27.0.1
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 12 threads
Compressing objects: 100% (12/12), done.
Writing objects: 100% (12/12), 1.64 KiB | 559.00 KiB/s, done.
Total 12 (delta 7), reused 0 (delta 0), pack-reused 0
To ssh://git.launchpad.net/ubuntu/+source/ubuntu-advantage-tools
 * [new tag] upload/27.0.1 -> upload/27.0.1
triage-impish+21.04:~/pkg/UbuntuAdvantageTools/review-mp401902$ dput ubuntu ubuntu-advantage-tools_27.0.1_source.changes
D: Setting host argument.
Checking signature on .changes
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools_27.0.1_source.changes: Valid signature from E603B2578FB8F0FB
Checking signature on .dsc
gpg: /home/bryce/pkg/UbuntuAdvantageTools/review-mp401902/ubuntu-advantage-tools_27.0.1.dsc: Valid signature from E603B2578FB8F0FB
Uploading to ubuntu (via ftp to upload.ubuntu.com):
  Uploading ubuntu-advantage-tools_27.0.1.dsc: done.
  Uploading ubuntu-advantage-tools_27.0.1.tar.xz: done.
  Uploading ubuntu-advantage-tools_27.0.1_source.buildinfo: done.
  Uploading ubuntu-advantage-tools_27.0.1_source.changes: done.
Successfully uploaded packages.

review: Approve
b32b476... by Grant Orndorff

apt-hook: refactor json hook messaging to be dry

The message construction code in the json hook
was pretty repetitive. This cleans it up a bit
and also removes some unnecessary explicit struct
names in the tests.

4053b40... by Grant Orndorff

apt-hook: ignore go hook on some architectures

Golang doesn't support powerpc and riscv on older versions.
This configures our Build-Depends and Makefile to gracefully
handle scenarios where we can't build our go hook. We will
simply not ship the go hook in these limited scenarios.

Fixes: #1603

d32eef4... by Grant Orndorff

build: order build-depends alternatives newer first

When using alternatives in the Build-Depends section of
debian/control, we should always put the newer version of
a package first. This is because sbuild doesn't resolve
alternatives by default and we want sbuild to work on the
latest version of ubuntu with default settings.

LP: #1926949

f30579b... by Grant Orndorff

tests: fix subp ls error case

3bfe06c... by Chad Smith

changelog 27.0.1 & 27.0.2

4da4d2b... by Chad Smith

jenkinsfile: trusty sbuild --resolve-depends for CI runs

Revision history for this message
Chad Smith (chad.smith) wrote :

Impish-proposed looks like it hasn't published officially. We also have SRU feedback on 27.0.1 that it breaks riscv64 package builds. So I think we need to close this branch and upload a 27.0.2 which will contain the right d/control magic and makefile conditionals to avoid packaging our go-based json hoook on those platforms without the golang support we need.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
diff --git a/.gitignore b/.gitignore
index 2b2da67..29b86f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -22,3 +22,11 @@ ubuntu_advantage_tools.dsc
22# test/jenkins artifacts22# test/jenkins artifacts
23pytest_results.xml23pytest_results.xml
24reports/24reports/
25<<<<<<< .gitignore
26=======
27
28# apt-hook build artifacts
29apt-hook/hook
30apt-hook/ubuntu-advantage.pot
31apt-hook/json-hook-src/json-hook
32>>>>>>> .gitignore
diff --git a/Jenkinsfile b/Jenkinsfile
index 2082e19..925a9c3 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -87,7 +87,11 @@ pipeline {
87 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}87 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
88 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}88 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
89 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .89 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
90<<<<<<< Jenkinsfile
90 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc91 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
92=======
93 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
94>>>>>>> Jenkinsfile
91 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb95 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
92 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb96 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
93 '''97 '''
@@ -108,7 +112,11 @@ pipeline {
108 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}112 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
109 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}113 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
110 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .114 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
115<<<<<<< Jenkinsfile
111 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc116 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
117=======
118 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
119>>>>>>> Jenkinsfile
112 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb120 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
113 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb121 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
114 '''122 '''
@@ -129,7 +137,11 @@ pipeline {
129 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}137 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
130 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}138 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
131 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .139 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
140<<<<<<< Jenkinsfile
132 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc141 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
142=======
143 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
144>>>>>>> Jenkinsfile
133 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb145 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
134 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb146 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
135 '''147 '''
@@ -150,7 +162,11 @@ pipeline {
150 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}162 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
151 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}163 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
152 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .164 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
165<<<<<<< Jenkinsfile
153 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc166 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
167=======
168 sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
169>>>>>>> Jenkinsfile
154 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb170 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
155 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb171 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
156 '''172 '''
diff --git a/apt-hook/Makefile b/apt-hook/Makefile
index 15c4856..11294b1 100644
--- a/apt-hook/Makefile
+++ b/apt-hook/Makefile
@@ -1,3 +1,21 @@
1# the go hook steps will be skipped if this is a nonempty string
2SKIP_GO_HOOK = ""
3
4GO_BIN = $(shell which go)
5# Try go-1.14 and go-1.10 if not in path
6ifeq ($(GO_BIN),)
7 ifneq ($(wildcard /usr/lib/go-1.14/bin/go),)
8 GO_BIN = /usr/lib/go-1.14/bin/go
9 else ifneq ($(wildcard /usr/lib/go-1.10/bin/go),)
10 GO_BIN = /usr/lib/go-1.10/bin/go
11 endif
12endif
13
14# If still not found then just don't build the go hook
15ifeq ($(GO_BIN),)
16 SKIP_GO_HOOK = "1"
17endif
18
1all: build19all: build
220
3build: hook ubuntu-advantage.pot json-hook21build: hook ubuntu-advantage.pot json-hook
@@ -9,15 +27,27 @@ hook: hook.cc
9 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)27 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)
1028
11json-hook:29json-hook:
30<<<<<<< apt-hook/Makefile
12 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go31 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go
32=======
33 [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) build json-hook.go)
34>>>>>>> apt-hook/Makefile
1335
14install: hook json-hook36install: hook json-hook
15 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf37 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf
16 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook38 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook
39<<<<<<< apt-hook/Makefile
17 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook40 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
41=======
42 [ $(SKIP_GO_HOOK) ] || install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
43>>>>>>> apt-hook/Makefile
1844
19clean:45clean:
20 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook46 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook
2147
22test:48test:
49<<<<<<< apt-hook/Makefile
23 cd json-hook-src && go test50 cd json-hook-src && go test
51=======
52 [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) test)
53>>>>>>> apt-hook/Makefile
diff --git a/apt-hook/json-hook-src/go.mod b/apt-hook/json-hook-src/go.mod
index 66726af..2823e25 100644
--- a/apt-hook/json-hook-src/go.mod
+++ b/apt-hook/json-hook-src/go.mod
@@ -1,3 +1,7 @@
1module json-hook1module json-hook
22
3<<<<<<< apt-hook/json-hook-src/go.mod
3go 1.24go 1.2
5=======
6go 1.7
7>>>>>>> apt-hook/json-hook-src/go.mod
diff --git a/apt-hook/json-hook-src/json-hook.go b/apt-hook/json-hook-src/json-hook.go
index 0f2e3eb..fc6b704 100644
--- a/apt-hook/json-hook-src/json-hook.go
+++ b/apt-hook/json-hook-src/json-hook.go
@@ -45,6 +45,21 @@ type jsonRPC struct {
45 } `json:"params"`45 } `json:"params"`
46}46}
4747
48<<<<<<< apt-hook/json-hook-src/json-hook.go
49=======
50func updatesFromSource(count int, source string, first bool) string {
51 security := ""
52 if first {
53 security = "security "
54 }
55 updates := "updates"
56 if count == 1 {
57 updates = "update"
58 }
59 return fmt.Sprintf("%d %s %s%s", count, source, security, updates)
60}
61
62>>>>>>> apt-hook/json-hook-src/json-hook.go
48func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {63func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {
49 displayStandard := true64 displayStandard := true
50 displayEsmInfra := true65 displayEsmInfra := true
@@ -72,6 +87,7 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
72 }87 }
7388
74 standardUpdates := ""89 standardUpdates := ""
90<<<<<<< apt-hook/json-hook-src/json-hook.go
75 esmInfraUpdates := ""91 esmInfraUpdates := ""
76 esmAppsUpdates := ""92 esmAppsUpdates := ""
77 if displayStandard {93 if displayStandard {
@@ -118,6 +134,32 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
118 }134 }
119135
120 return standardUpdates + esmInfraUpdates + esmAppsUpdates136 return standardUpdates + esmInfraUpdates + esmAppsUpdates
137=======
138 afterStandard := ""
139 esmInfraUpdates := ""
140 afterInfra := ""
141 esmAppsUpdates := ""
142
143 if displayStandard {
144 standardUpdates = updatesFromSource(standardSecurityCount, "standard", true)
145 if displayEsmInfra && displayEsmApps {
146 afterStandard = ", "
147 } else if displayEsmInfra || displayEsmApps {
148 afterStandard = " and "
149 }
150 }
151 if displayEsmInfra {
152 esmInfraUpdates = updatesFromSource(esmInfraCount, "esm-infra", esmInfraFirst)
153 if displayEsmApps {
154 afterInfra = " and "
155 }
156 }
157 if displayEsmApps {
158 esmAppsUpdates = updatesFromSource(esmAppsCount, "esm-apps", esmAppsFirst)
159 }
160
161 return standardUpdates + afterStandard + esmInfraUpdates + afterInfra + esmAppsUpdates
162>>>>>>> apt-hook/json-hook-src/json-hook.go
121}163}
122164
123func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {165func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {
diff --git a/apt-hook/json-hook-src/json-hook_test.go b/apt-hook/json-hook-src/json-hook_test.go
index cfc1788..135ec2c 100644
--- a/apt-hook/json-hook-src/json-hook_test.go
+++ b/apt-hook/json-hook-src/json-hook_test.go
@@ -14,6 +14,7 @@ func TestCreateUpdateMessages(t *testing.T) {
14 expectedMessage string14 expectedMessage string
15 }15 }
16 testParamsList := []params{16 testParamsList := []params{
17<<<<<<< apt-hook/json-hook-src/json-hook_test.go
17 params{0, 0, 0, ""},18 params{0, 0, 0, ""},
18 params{0, 0, 1, "1 esm-apps security update"},19 params{0, 0, 1, "1 esm-apps security update"},
19 params{0, 0, 2, "2 esm-apps security updates"},20 params{0, 0, 2, "2 esm-apps security updates"},
@@ -41,6 +42,35 @@ func TestCreateUpdateMessages(t *testing.T) {
41 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},42 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
42 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},43 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
43 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},44 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
45=======
46 {0, 0, 0, ""},
47 {0, 0, 1, "1 esm-apps security update"},
48 {0, 0, 2, "2 esm-apps security updates"},
49 {0, 1, 0, "1 esm-infra security update"},
50 {0, 1, 1, "1 esm-infra security update and 1 esm-apps update"},
51 {0, 1, 2, "1 esm-infra security update and 2 esm-apps updates"},
52 {0, 2, 0, "2 esm-infra security updates"},
53 {0, 2, 1, "2 esm-infra security updates and 1 esm-apps update"},
54 {0, 2, 2, "2 esm-infra security updates and 2 esm-apps updates"},
55 {1, 0, 0, "1 standard security update"},
56 {1, 0, 1, "1 standard security update and 1 esm-apps update"},
57 {1, 0, 2, "1 standard security update and 2 esm-apps updates"},
58 {1, 1, 0, "1 standard security update and 1 esm-infra update"},
59 {1, 1, 1, "1 standard security update, 1 esm-infra update and 1 esm-apps update"},
60 {1, 1, 2, "1 standard security update, 1 esm-infra update and 2 esm-apps updates"},
61 {1, 2, 0, "1 standard security update and 2 esm-infra updates"},
62 {1, 2, 1, "1 standard security update, 2 esm-infra updates and 1 esm-apps update"},
63 {1, 2, 2, "1 standard security update, 2 esm-infra updates and 2 esm-apps updates"},
64 {2, 0, 0, "2 standard security updates"},
65 {2, 0, 1, "2 standard security updates and 1 esm-apps update"},
66 {2, 0, 2, "2 standard security updates and 2 esm-apps updates"},
67 {2, 1, 0, "2 standard security updates and 1 esm-infra update"},
68 {2, 1, 1, "2 standard security updates, 1 esm-infra update and 1 esm-apps update"},
69 {2, 1, 2, "2 standard security updates, 1 esm-infra update and 2 esm-apps updates"},
70 {2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
71 {2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
72 {2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
73>>>>>>> apt-hook/json-hook-src/json-hook_test.go
44 }74 }
4575
46 for i, testParams := range testParamsList {76 for i, testParams := range testParamsList {
@@ -62,7 +92,11 @@ func TestCountSecurityUpdates(t *testing.T) {
62 expectedEsmAppsCount int92 expectedEsmAppsCount int
63 }93 }
64 testParamsList := []params{94 testParamsList := []params{
95<<<<<<< apt-hook/json-hook-src/json-hook_test.go
65 params{mockJson, 1, 2, 3},96 params{mockJson, 1, 2, 3},
97=======
98 {mockJson, 1, 2, 3},
99>>>>>>> apt-hook/json-hook-src/json-hook_test.go
66 }100 }
67101
68 for i, testParams := range testParamsList {102 for i, testParams := range testParamsList {
diff --git a/debian/changelog b/debian/changelog
index 9c6e17f..6a2d7e9 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,19 @@
1<<<<<<< debian/changelog
2=======
3ubuntu-advantage-tools (27.0.2) impish; urgency=medium
4
5 * d/control:
6 - order build-depends alternatives newer first (LP: #1926949)
7 - apt-hook: do not attempt to package go APT JSON hook on some
8 architectures (GH: #1603)
9 * Bug-fix release 27.0.2: autopkg build failures on riscv64 and powerpc
10 - apt-hook: refactor json hook messaging to be dry
11 - tests: fix subp ls error case for powerpc builds
12 - jenkinsfile: add --resolve-alternatives for trusty builds
13
14 -- Chad Smith <chad.smith@canonical.com> Fri, 07 May 2021 11:58:03 -0600
15
16>>>>>>> debian/changelog
1ubuntu-advantage-tools (27.0.1) impish; urgency=medium17ubuntu-advantage-tools (27.0.1) impish; urgency=medium
218
3 * Add .gitignore and cleanup ignored directory .pytest_cache19 * Add .gitignore and cleanup ignored directory .pytest_cache
@@ -8,6 +24,10 @@ ubuntu-advantage-tools (27.0.1) impish; urgency=medium
8ubuntu-advantage-tools (27.0) impish; urgency=medium24ubuntu-advantage-tools (27.0) impish; urgency=medium
925
10 * New upstream release 27.0:26 * New upstream release 27.0:
27<<<<<<< debian/changelog
28=======
29 - apt-hook: mitigate failures with true
30>>>>>>> debian/changelog
11 - messages: add optional (s) to apt messaging to include31 - messages: add optional (s) to apt messaging to include
12 singular/plural pkgs32 singular/plural pkgs
13 - apt-hook: avoid reporting and counting duplicate package33 - apt-hook: avoid reporting and counting duplicate package
diff --git a/debian/control b/debian/control
index cd28a1f..660a80d 100644
--- a/debian/control
+++ b/debian/control
@@ -6,10 +6,17 @@ Build-Depends: bash-completion,
6 debhelper (>=9),6 debhelper (>=9),
7 debianutils,7 debianutils,
8 dh-python,8 dh-python,
9<<<<<<< debian/control
9 dh-systemd | debhelper (>= 13.3),10 dh-systemd | debhelper (>= 13.3),
10 gettext,11 gettext,
11 git,12 git,
12 golang,13 golang,
14=======
15 debhelper (>= 13.3) | dh-systemd,
16 gettext,
17 git,
18 golang-go (>= 2:1.14~) [!powerpc] | golang-1.14-go [!powerpc] | golang-1.10-go [!powerpc !riscv64],
19>>>>>>> debian/control
13 libapt-pkg-dev,20 libapt-pkg-dev,
14 po-debconf,21 po-debconf,
15 python3 (>= 3.4),22 python3 (>= 3.4),
diff --git a/debian/rules b/debian/rules
index 9bea522..57898f9 100755
--- a/debian/rules
+++ b/debian/rules
@@ -27,6 +27,7 @@ override_dh_auto_build:
2727
28override_dh_auto_test:28override_dh_auto_test:
29ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))29ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
30 make -C apt-hook test
30 python3 -m pytest31 python3 -m pytest
31ifdef FLAKE832ifdef FLAKE8
32 # required for Trusty: flake8 does not install a __main__ for -m33 # required for Trusty: flake8 does not install a __main__ for -m
diff --git a/uaclient/tests/test_util.py b/uaclient/tests/test_util.py
index 019faf2..29a5bd2 100644
--- a/uaclient/tests/test_util.py
+++ b/uaclient/tests/test_util.py
@@ -291,11 +291,12 @@ class TestSubp:
291 with pytest.raises(util.ProcessExecutionError) as excinfo:291 with pytest.raises(util.ProcessExecutionError) as excinfo:
292 util.subp(["ls", "--bogus"])292 util.subp(["ls", "--bogus"])
293293
294 expected_error = (294 expected_errors = [
295 "Failed running command 'ls --bogus' [exit(2)]."295 "Failed running command 'ls --bogus' [exit(2)].",
296 " Message: ls: unrecognized option"296 "ls: unrecognized option '--bogus'",
297 )297 ]
298 assert expected_error in str(excinfo.value)298 for msg in expected_errors:
299 assert msg in str(excinfo.value)
299 assert 0 == m_sleep.call_count # no retries300 assert 0 == m_sleep.call_count # no retries
300301
301 @mock.patch("uaclient.util.time.sleep")302 @mock.patch("uaclient.util.time.sleep")
@@ -795,6 +796,37 @@ class TestIsConfigValueTrue:
795 config=cfg.cfg, path_to_value="features.allow_beta"796 config=cfg.cfg, path_to_value="features.allow_beta"
796 )797 )
797 assert return_val == actual_val798 assert return_val == actual_val
799<<<<<<< uaclient/tests/test_util.py
800
801 @pytest.mark.parametrize(
802 "config_dict, key_val",
803 [
804 ({"allow_beta": "tru"}, "tru"),
805 ({"allow_beta": "Tre"}, "Tre"),
806 ({"allow_beta": "flse"}, "flse"),
807 ({"allow_beta": "Fale"}, "Fale"),
808 ],
809 )
810 def test_exception_is_config_value_true(
811 self, config_dict, key_val, FakeConfig
812 ):
813 path_to_value = "features.allow_beta"
814 cfg = FakeConfig()
815 cfg.override_features(config_dict)
816 with pytest.raises(exceptions.UserFacingError) as excinfo:
817 util.is_config_value_true(
818 config=cfg.cfg, path_to_value=path_to_value
819 )
820
821 expected_msg = status.ERROR_INVALID_CONFIG_VALUE.format(
822 path_to_value=path_to_value,
823 expected_value="boolean string: true or false",
824 value=key_val,
825 )
826 assert expected_msg == str(excinfo.value)
827
828
829=======
798830
799 @pytest.mark.parametrize(831 @pytest.mark.parametrize(
800 "config_dict, key_val",832 "config_dict, key_val",
@@ -824,6 +856,7 @@ class TestIsConfigValueTrue:
824 assert expected_msg == str(excinfo.value)856 assert expected_msg == str(excinfo.value)
825857
826858
859>>>>>>> uaclient/tests/test_util.py
827class TestRedactSensitiveLogs:860class TestRedactSensitiveLogs:
828 @pytest.mark.parametrize(861 @pytest.mark.parametrize(
829 "raw_log,expected",862 "raw_log,expected",

Subscribers

People subscribed via source and target branches

to status/vote changes: