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 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 on 2021-04-30

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 on 2021-05-03

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 on 2021-05-04

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 on 2021-05-06

tests: fix subp ls error case

3bfe06c... by Chad Smith on 2021-05-07

changelog 27.0.1 & 27.0.2

4da4d2b... by Chad Smith on 2021-05-07

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
1diff --git a/.gitignore b/.gitignore
2index 2b2da67..29b86f4 100644
3--- a/.gitignore
4+++ b/.gitignore
5@@ -22,3 +22,11 @@ ubuntu_advantage_tools.dsc
6 # test/jenkins artifacts
7 pytest_results.xml
8 reports/
9+<<<<<<< .gitignore
10+=======
11+
12+# apt-hook build artifacts
13+apt-hook/hook
14+apt-hook/ubuntu-advantage.pot
15+apt-hook/json-hook-src/json-hook
16+>>>>>>> .gitignore
17diff --git a/Jenkinsfile b/Jenkinsfile
18index 2082e19..925a9c3 100644
19--- a/Jenkinsfile
20+++ b/Jenkinsfile
21@@ -87,7 +87,11 @@ pipeline {
22 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
23 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
24 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
25+<<<<<<< Jenkinsfile
26 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
27+=======
28+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
29+>>>>>>> Jenkinsfile
30 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
31 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
32 '''
33@@ -108,7 +112,11 @@ pipeline {
34 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
35 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
36 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
37+<<<<<<< Jenkinsfile
38 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
39+=======
40+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
41+>>>>>>> Jenkinsfile
42 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
43 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
44 '''
45@@ -129,7 +137,11 @@ pipeline {
46 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
47 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
48 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
49+<<<<<<< Jenkinsfile
50 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
51+=======
52+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
53+>>>>>>> Jenkinsfile
54 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
55 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
56 '''
57@@ -150,7 +162,11 @@ pipeline {
58 cp debian/changelog ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
59 sed -i "s/${PKG_VERSION}/${NEW_PKG_VERSION}/" ${WORKSPACE}/debian/changelog-${SERIES_VERSION}
60 dpkg-source -l${WORKSPACE}/debian/changelog-${SERIES_VERSION} -b .
61+<<<<<<< Jenkinsfile
62 sbuild --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
63+=======
64+ sbuild --resolve-alternatives --nolog --verbose --dist=${BUILD_SERIES} --no-run-lintian --append-to-version=~${SERIES_VERSION} ../ubuntu-advantage-tools*${NEW_PKG_VERSION}*dsc
65+>>>>>>> Jenkinsfile
66 cp ./ubuntu-advantage-tools*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-tools-${BUILD_SERIES}.deb
67 cp ./ubuntu-advantage-pro*${SERIES_VERSION}*.deb ${ARTIFACT_DIR}/ubuntu-advantage-pro-${BUILD_SERIES}.deb
68 '''
69diff --git a/apt-hook/Makefile b/apt-hook/Makefile
70index 15c4856..11294b1 100644
71--- a/apt-hook/Makefile
72+++ b/apt-hook/Makefile
73@@ -1,3 +1,21 @@
74+# the go hook steps will be skipped if this is a nonempty string
75+SKIP_GO_HOOK = ""
76+
77+GO_BIN = $(shell which go)
78+# Try go-1.14 and go-1.10 if not in path
79+ifeq ($(GO_BIN),)
80+ ifneq ($(wildcard /usr/lib/go-1.14/bin/go),)
81+ GO_BIN = /usr/lib/go-1.14/bin/go
82+ else ifneq ($(wildcard /usr/lib/go-1.10/bin/go),)
83+ GO_BIN = /usr/lib/go-1.10/bin/go
84+ endif
85+endif
86+
87+# If still not found then just don't build the go hook
88+ifeq ($(GO_BIN),)
89+ SKIP_GO_HOOK = "1"
90+endif
91+
92 all: build
93
94 build: hook ubuntu-advantage.pot json-hook
95@@ -9,15 +27,27 @@ hook: hook.cc
96 $(CXX) -Wall -Wextra -pedantic -std=c++11 $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) -g -o hook hook.cc -lapt-pkg $(LDLIBS)
97
98 json-hook:
99+<<<<<<< apt-hook/Makefile
100 cd json-hook-src && GOCACHE=/tmp/ go build json-hook.go
101+=======
102+ [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) build json-hook.go)
103+>>>>>>> apt-hook/Makefile
104
105 install: hook json-hook
106 install -D -m 644 20apt-esm-hook.conf $(DESTDIR)/etc/apt/apt.conf.d/20apt-esm-hook.conf
107 install -D -m 755 hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-hook
108+<<<<<<< apt-hook/Makefile
109 install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
110+=======
111+ [ $(SKIP_GO_HOOK) ] || install -D -m 755 json-hook-src/json-hook $(DESTDIR)/usr/lib/ubuntu-advantage/apt-esm-json-hook
112+>>>>>>> apt-hook/Makefile
113
114 clean:
115 rm -f hook ubuntu-advantage.pot json-hook-src/json-hook
116
117 test:
118+<<<<<<< apt-hook/Makefile
119 cd json-hook-src && go test
120+=======
121+ [ $(SKIP_GO_HOOK) ] || (cd json-hook-src && GOCACHE=/tmp/ $(GO_BIN) test)
122+>>>>>>> apt-hook/Makefile
123diff --git a/apt-hook/json-hook-src/go.mod b/apt-hook/json-hook-src/go.mod
124index 66726af..2823e25 100644
125--- a/apt-hook/json-hook-src/go.mod
126+++ b/apt-hook/json-hook-src/go.mod
127@@ -1,3 +1,7 @@
128 module json-hook
129
130+<<<<<<< apt-hook/json-hook-src/go.mod
131 go 1.2
132+=======
133+go 1.7
134+>>>>>>> apt-hook/json-hook-src/go.mod
135diff --git a/apt-hook/json-hook-src/json-hook.go b/apt-hook/json-hook-src/json-hook.go
136index 0f2e3eb..fc6b704 100644
137--- a/apt-hook/json-hook-src/json-hook.go
138+++ b/apt-hook/json-hook-src/json-hook.go
139@@ -45,6 +45,21 @@ type jsonRPC struct {
140 } `json:"params"`
141 }
142
143+<<<<<<< apt-hook/json-hook-src/json-hook.go
144+=======
145+func updatesFromSource(count int, source string, first bool) string {
146+ security := ""
147+ if first {
148+ security = "security "
149+ }
150+ updates := "updates"
151+ if count == 1 {
152+ updates = "update"
153+ }
154+ return fmt.Sprintf("%d %s %s%s", count, source, security, updates)
155+}
156+
157+>>>>>>> apt-hook/json-hook-src/json-hook.go
158 func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCount int) string {
159 displayStandard := true
160 displayEsmInfra := true
161@@ -72,6 +87,7 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
162 }
163
164 standardUpdates := ""
165+<<<<<<< apt-hook/json-hook-src/json-hook.go
166 esmInfraUpdates := ""
167 esmAppsUpdates := ""
168 if displayStandard {
169@@ -118,6 +134,32 @@ func createUpdateMessage(standardSecurityCount int, esmInfraCount int, esmAppsCo
170 }
171
172 return standardUpdates + esmInfraUpdates + esmAppsUpdates
173+=======
174+ afterStandard := ""
175+ esmInfraUpdates := ""
176+ afterInfra := ""
177+ esmAppsUpdates := ""
178+
179+ if displayStandard {
180+ standardUpdates = updatesFromSource(standardSecurityCount, "standard", true)
181+ if displayEsmInfra && displayEsmApps {
182+ afterStandard = ", "
183+ } else if displayEsmInfra || displayEsmApps {
184+ afterStandard = " and "
185+ }
186+ }
187+ if displayEsmInfra {
188+ esmInfraUpdates = updatesFromSource(esmInfraCount, "esm-infra", esmInfraFirst)
189+ if displayEsmApps {
190+ afterInfra = " and "
191+ }
192+ }
193+ if displayEsmApps {
194+ esmAppsUpdates = updatesFromSource(esmAppsCount, "esm-apps", esmAppsFirst)
195+ }
196+
197+ return standardUpdates + afterStandard + esmInfraUpdates + afterInfra + esmAppsUpdates
198+>>>>>>> apt-hook/json-hook-src/json-hook.go
199 }
200
201 func fromOriginAndArchive(pkgVersion jsonRPCPackageVersion, origin string, archive string) bool {
202diff --git a/apt-hook/json-hook-src/json-hook_test.go b/apt-hook/json-hook-src/json-hook_test.go
203index cfc1788..135ec2c 100644
204--- a/apt-hook/json-hook-src/json-hook_test.go
205+++ b/apt-hook/json-hook-src/json-hook_test.go
206@@ -14,6 +14,7 @@ func TestCreateUpdateMessages(t *testing.T) {
207 expectedMessage string
208 }
209 testParamsList := []params{
210+<<<<<<< apt-hook/json-hook-src/json-hook_test.go
211 params{0, 0, 0, ""},
212 params{0, 0, 1, "1 esm-apps security update"},
213 params{0, 0, 2, "2 esm-apps security updates"},
214@@ -41,6 +42,35 @@ func TestCreateUpdateMessages(t *testing.T) {
215 params{2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
216 params{2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
217 params{2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
218+=======
219+ {0, 0, 0, ""},
220+ {0, 0, 1, "1 esm-apps security update"},
221+ {0, 0, 2, "2 esm-apps security updates"},
222+ {0, 1, 0, "1 esm-infra security update"},
223+ {0, 1, 1, "1 esm-infra security update and 1 esm-apps update"},
224+ {0, 1, 2, "1 esm-infra security update and 2 esm-apps updates"},
225+ {0, 2, 0, "2 esm-infra security updates"},
226+ {0, 2, 1, "2 esm-infra security updates and 1 esm-apps update"},
227+ {0, 2, 2, "2 esm-infra security updates and 2 esm-apps updates"},
228+ {1, 0, 0, "1 standard security update"},
229+ {1, 0, 1, "1 standard security update and 1 esm-apps update"},
230+ {1, 0, 2, "1 standard security update and 2 esm-apps updates"},
231+ {1, 1, 0, "1 standard security update and 1 esm-infra update"},
232+ {1, 1, 1, "1 standard security update, 1 esm-infra update and 1 esm-apps update"},
233+ {1, 1, 2, "1 standard security update, 1 esm-infra update and 2 esm-apps updates"},
234+ {1, 2, 0, "1 standard security update and 2 esm-infra updates"},
235+ {1, 2, 1, "1 standard security update, 2 esm-infra updates and 1 esm-apps update"},
236+ {1, 2, 2, "1 standard security update, 2 esm-infra updates and 2 esm-apps updates"},
237+ {2, 0, 0, "2 standard security updates"},
238+ {2, 0, 1, "2 standard security updates and 1 esm-apps update"},
239+ {2, 0, 2, "2 standard security updates and 2 esm-apps updates"},
240+ {2, 1, 0, "2 standard security updates and 1 esm-infra update"},
241+ {2, 1, 1, "2 standard security updates, 1 esm-infra update and 1 esm-apps update"},
242+ {2, 1, 2, "2 standard security updates, 1 esm-infra update and 2 esm-apps updates"},
243+ {2, 2, 0, "2 standard security updates and 2 esm-infra updates"},
244+ {2, 2, 1, "2 standard security updates, 2 esm-infra updates and 1 esm-apps update"},
245+ {2, 2, 2, "2 standard security updates, 2 esm-infra updates and 2 esm-apps updates"},
246+>>>>>>> apt-hook/json-hook-src/json-hook_test.go
247 }
248
249 for i, testParams := range testParamsList {
250@@ -62,7 +92,11 @@ func TestCountSecurityUpdates(t *testing.T) {
251 expectedEsmAppsCount int
252 }
253 testParamsList := []params{
254+<<<<<<< apt-hook/json-hook-src/json-hook_test.go
255 params{mockJson, 1, 2, 3},
256+=======
257+ {mockJson, 1, 2, 3},
258+>>>>>>> apt-hook/json-hook-src/json-hook_test.go
259 }
260
261 for i, testParams := range testParamsList {
262diff --git a/debian/changelog b/debian/changelog
263index 9c6e17f..6a2d7e9 100644
264--- a/debian/changelog
265+++ b/debian/changelog
266@@ -1,3 +1,19 @@
267+<<<<<<< debian/changelog
268+=======
269+ubuntu-advantage-tools (27.0.2) impish; urgency=medium
270+
271+ * d/control:
272+ - order build-depends alternatives newer first (LP: #1926949)
273+ - apt-hook: do not attempt to package go APT JSON hook on some
274+ architectures (GH: #1603)
275+ * Bug-fix release 27.0.2: autopkg build failures on riscv64 and powerpc
276+ - apt-hook: refactor json hook messaging to be dry
277+ - tests: fix subp ls error case for powerpc builds
278+ - jenkinsfile: add --resolve-alternatives for trusty builds
279+
280+ -- Chad Smith <chad.smith@canonical.com> Fri, 07 May 2021 11:58:03 -0600
281+
282+>>>>>>> debian/changelog
283 ubuntu-advantage-tools (27.0.1) impish; urgency=medium
284
285 * Add .gitignore and cleanup ignored directory .pytest_cache
286@@ -8,6 +24,10 @@ ubuntu-advantage-tools (27.0.1) impish; urgency=medium
287 ubuntu-advantage-tools (27.0) impish; urgency=medium
288
289 * New upstream release 27.0:
290+<<<<<<< debian/changelog
291+=======
292+ - apt-hook: mitigate failures with true
293+>>>>>>> debian/changelog
294 - messages: add optional (s) to apt messaging to include
295 singular/plural pkgs
296 - apt-hook: avoid reporting and counting duplicate package
297diff --git a/debian/control b/debian/control
298index cd28a1f..660a80d 100644
299--- a/debian/control
300+++ b/debian/control
301@@ -6,10 +6,17 @@ Build-Depends: bash-completion,
302 debhelper (>=9),
303 debianutils,
304 dh-python,
305+<<<<<<< debian/control
306 dh-systemd | debhelper (>= 13.3),
307 gettext,
308 git,
309 golang,
310+=======
311+ debhelper (>= 13.3) | dh-systemd,
312+ gettext,
313+ git,
314+ golang-go (>= 2:1.14~) [!powerpc] | golang-1.14-go [!powerpc] | golang-1.10-go [!powerpc !riscv64],
315+>>>>>>> debian/control
316 libapt-pkg-dev,
317 po-debconf,
318 python3 (>= 3.4),
319diff --git a/debian/rules b/debian/rules
320index 9bea522..57898f9 100755
321--- a/debian/rules
322+++ b/debian/rules
323@@ -27,6 +27,7 @@ override_dh_auto_build:
324
325 override_dh_auto_test:
326 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
327+ make -C apt-hook test
328 python3 -m pytest
329 ifdef FLAKE8
330 # required for Trusty: flake8 does not install a __main__ for -m
331diff --git a/uaclient/tests/test_util.py b/uaclient/tests/test_util.py
332index 019faf2..29a5bd2 100644
333--- a/uaclient/tests/test_util.py
334+++ b/uaclient/tests/test_util.py
335@@ -291,11 +291,12 @@ class TestSubp:
336 with pytest.raises(util.ProcessExecutionError) as excinfo:
337 util.subp(["ls", "--bogus"])
338
339- expected_error = (
340- "Failed running command 'ls --bogus' [exit(2)]."
341- " Message: ls: unrecognized option"
342- )
343- assert expected_error in str(excinfo.value)
344+ expected_errors = [
345+ "Failed running command 'ls --bogus' [exit(2)].",
346+ "ls: unrecognized option '--bogus'",
347+ ]
348+ for msg in expected_errors:
349+ assert msg in str(excinfo.value)
350 assert 0 == m_sleep.call_count # no retries
351
352 @mock.patch("uaclient.util.time.sleep")
353@@ -795,6 +796,37 @@ class TestIsConfigValueTrue:
354 config=cfg.cfg, path_to_value="features.allow_beta"
355 )
356 assert return_val == actual_val
357+<<<<<<< uaclient/tests/test_util.py
358+
359+ @pytest.mark.parametrize(
360+ "config_dict, key_val",
361+ [
362+ ({"allow_beta": "tru"}, "tru"),
363+ ({"allow_beta": "Tre"}, "Tre"),
364+ ({"allow_beta": "flse"}, "flse"),
365+ ({"allow_beta": "Fale"}, "Fale"),
366+ ],
367+ )
368+ def test_exception_is_config_value_true(
369+ self, config_dict, key_val, FakeConfig
370+ ):
371+ path_to_value = "features.allow_beta"
372+ cfg = FakeConfig()
373+ cfg.override_features(config_dict)
374+ with pytest.raises(exceptions.UserFacingError) as excinfo:
375+ util.is_config_value_true(
376+ config=cfg.cfg, path_to_value=path_to_value
377+ )
378+
379+ expected_msg = status.ERROR_INVALID_CONFIG_VALUE.format(
380+ path_to_value=path_to_value,
381+ expected_value="boolean string: true or false",
382+ value=key_val,
383+ )
384+ assert expected_msg == str(excinfo.value)
385+
386+
387+=======
388
389 @pytest.mark.parametrize(
390 "config_dict, key_val",
391@@ -824,6 +856,7 @@ class TestIsConfigValueTrue:
392 assert expected_msg == str(excinfo.value)
393
394
395+>>>>>>> uaclient/tests/test_util.py
396 class TestRedactSensitiveLogs:
397 @pytest.mark.parametrize(
398 "raw_log,expected",

Subscribers

People subscribed via source and target branches

to status/vote changes: