From 7add03175465d46698d57769e7a0c1ac8473b901 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Tue, 6 Dec 2022 16:25:45 -0800 Subject: [PATCH 1/7] Update the build and packaging script for Fedora 37. --- ChangeLog | 4 +- HOWTO_PACKAGE.md | 49 ++++---- build_packages.py | 38 ++++--- configure.ac | 2 +- create-yum-repo.sh | 2 +- distro-info.sh | 2 +- generate-rpm.sh | 60 ++++------ rpm_resources/.rpmmacros | 3 +- rpm_resources/fedora-37-x86_64.cfg | 176 +++++++++++++++++++++++++++++ 9 files changed, 255 insertions(+), 81 deletions(-) create mode 100644 rpm_resources/fedora-37-x86_64.cfg diff --git a/ChangeLog b/ChangeLog index d701586..9092432 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,8 +2,8 @@ All notable changes to this project will be documented in this file. Date based versioning is now used in this project. This is so that it doesn't get confused with the Dropbox desktop client. -Unreleased ----------- +Version 2022.12.05 +------------------ * Update to use libnautilus-extension-4 and gtk4, supporting Nautilus 43+. * Fix various uses of deprecated APIs, such as the "DeprecationWarning: isSet() is deprecated" warning. * Fix colors of ignored files in `dropbox filestatus`. diff --git a/HOWTO_PACKAGE.md b/HOWTO_PACKAGE.md index c9513d7..b2be738 100644 --- a/HOWTO_PACKAGE.md +++ b/HOWTO_PACKAGE.md @@ -4,7 +4,9 @@ This is a work-in-progress guide on how to build Ubuntu, Debian, and Fedora packages for nautilus-dropbox. It assumes you're building from a 16.04 Ubuntu machine. -1. Obtain the signing key. Add it to your keyring using `gpg --import /path/to/key`. +1. Obtain the signing tarball and extract all of the files into your `~/.gnupg` + directory. If producing an RPM build, also import it into RPM with + `sudo rpm --import /path/to/key`. 2. Install the build dependencies. @@ -14,34 +16,37 @@ This is a non-exhaustive list of what you'll need: sudo apt-get install pbuilder debootstrap devscripts libnautilus-extension-dev mock rpm expect createrepo cdbs gnome-common debian-archive-keyring python3-docutils ``` -3. Copy .pbuilderrc to ~/.pbuilderrc +3. On a Debian/Ubuntu machine: + 1. Copy .pbuilderrc to ~/.pbuilderrc -4. Create chroots for each of the Debian or Ubuntu builds you'll be doing. + 2. Create chroots for each of the Debian or Ubuntu builds you'll be doing. -``` -sudo DIST=trusty ARCH=i386 pbuilder create --debootstrapopts --variant=buildd -sudo DIST=trusty ARCH=amd64 pbuilder create --debootstrapopts --variant=buildd -sudo DIST=jessie ARCH=i386 pbuilder create --debootstrapopts --variant=buildd -sudo DIST=jessie ARCH=amd64 pbuilder create --debootstrapopts --variant=buildd -``` + ``` + sudo DIST=trusty ARCH=i386 pbuilder create --debootstrapopts --variant=buildd + sudo DIST=trusty ARCH=amd64 pbuilder create --debootstrapopts --variant=buildd + sudo DIST=jessie ARCH=i386 pbuilder create --debootstrapopts --variant=buildd + sudo DIST=jessie ARCH=amd64 pbuilder create --debootstrapopts --variant=buildd + ``` + + 3. Build all the packages with: `python3 build_packages.py deb` -5. Add yourself to the mock group (create it if it doesn't exist), and - then logout and login for the group to take affect. - Probably you have to run `build_packages.py` command with `sudo` permission which - means you should add your root account to the mock group. Otherwise, you will see - `The password you typed is invalid.` error. +4. On a Fedora machine: + 1. Add yourself to the mock group (create it if it doesn't exist), and + then logout and login for the group to take affect. + `build_packages.py` will use `sudo` for a few of the commands, so add both + your user account and root to the group. -6. Copy rpm_resources/fedora-*.cfg to /etc/mock. + 2. Copy rpm_resources/fedora-*.cfg to /etc/mock. - If you need to add new configs when we start targetting a new Fedora version, - you can find all the configs here: https://github.com/rpm-software-management/mock + If you need to add new configs when we start targetting a new Fedora version, + you can find all the configs here: https://github.com/rpm-software-management/mock -7. Copy rpm_resources/.rpmmacros to ~/.rpmmacros + 3. Copy rpm_resources/.rpmmacros to ~/.rpmmacros -8. Build all the packages with: `python3 build_packages.py` + 4. Build all the packages with: `python3 build_packages.py rpm` -If the build is successful, a tar of the output will be in: /tmp/nautilus-dropbox-release.tar.gz +5. Gather the built outputs from both machines, and put them in a TAR named nautilus-dropbox-release.tar.gz -8. Update the ChangeLog with all the changes in the release. +6. Update the ChangeLog with all the changes in the release. -9. Tag the release and push the tag to GitHub. +7. Tag the release and push the tag to GitHub. diff --git a/build_packages.py b/build_packages.py index c95fb99..f314ea1 100644 --- a/build_packages.py +++ b/build_packages.py @@ -110,7 +110,7 @@ def generate_yum_repo(self, distro_upper, codenames, dist, archs, dist_name): (distro, f, distro)) == 0 def build_rpm(self, config): - # config='fedora-21-i386,fedora-21-x86_64' + # config='fedora-37-i386,fedora-37-x86_64' assert self.system('sh generate-rpm.sh') == 0 path = None @@ -132,7 +132,7 @@ def build_rpm(self, config): try: assert self.system( - '/usr/bin/mock -r {config} --resultdir={mock_config_out} rebuild {path}'.format( + 'sudo /usr/bin/mock -r {config} --resultdir={mock_config_out} rebuild {path}'.format( config=config, mock_config_out=mock_config_out, path=path)) == 0 @@ -141,6 +141,7 @@ def build_rpm(self, config): self.system('cat %s/*.log >&2' % (mock_config_out,)) raise else: + assert self.system('sudo chown -R $(whoami):$(whoami) %s' % (mock_config_out,)) assert self.system('find %s/ -name *.rpm | xargs /usr/bin/expect sign-rpm.exp' % ( mock_config_out,)) == 0 @@ -156,22 +157,29 @@ def build_all(self): assert self.system('rm -rf /home/releng/result') == 0 assert self.system('mkdir -p /home/releng/result/packages') == 0 - # Ubuntu - self.build_deb('trusty', 'i386') - self.build_deb('trusty', 'amd64') - self.generate_deb_repo('Ubuntu', info['UBUNTU_CODENAMES'], 'trusty', ['amd64', 'i386']) + deb_created = False + rpm_created = False + if len(sys.argv) == 1 or 'deb' in sys.argv: + # Ubuntu + self.build_deb('trusty', 'i386') + self.build_deb('trusty', 'amd64') + self.generate_deb_repo('Ubuntu', info['UBUNTU_CODENAMES'], 'trusty', ['amd64', 'i386']) - # Debian - self.build_deb('jessie', 'i386') - self.build_deb('jessie', 'amd64') - self.generate_deb_repo('Debian', info['DEBIAN_CODENAMES'], 'jessie', ['amd64', 'i386']) + # Debian + self.build_deb('jessie', 'i386') + self.build_deb('jessie', 'amd64') + self.generate_deb_repo('Debian', info['DEBIAN_CODENAMES'], 'jessie', ['amd64', 'i386']) + deb_created = True # Fedora - self.build_rpm('fedora-21-i386') - self.build_rpm('fedora-21-x86_64') - self.generate_yum_repo('Fedora', info['FEDORA_CODENAMES'], 'fedora-21', ['i386', 'x86_64'], 'fc21') - - self.generate_packages() + if len(sys.argv) == 1 or 'rpm' in sys.argv: + # Fedora dropped 32-bit support several versions ago. + self.build_rpm('fedora-37-x86_64') + self.generate_yum_repo('Fedora', info['FEDORA_CODENAMES'], 'fedora-37', ['x86_64'], 'fc37') + rpm_created = True + + if deb_created and rpm_created: + self.generate_packages() if __name__ == "__main__": diff --git a/configure.ac b/configure.ac index 0afca28..f1b996f 100644 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Initialization -AC_INIT([nautilus-dropbox], 2020.03.04) +AC_INIT([nautilus-dropbox], 2022.12.05) AM_INIT_AUTOMAKE([foreign]) diff --git a/create-yum-repo.sh b/create-yum-repo.sh index f2ae020..dafdb3d 100644 --- a/create-yum-repo.sh +++ b/create-yum-repo.sh @@ -3,7 +3,7 @@ set -e # DISTS must be defined. -ARCHS="i386 x86_64" +ARCHS="x86_64" for DIST in $DISTS; do diff --git a/distro-info.sh b/distro-info.sh index d8e7aba..cfbee66 100755 --- a/distro-info.sh +++ b/distro-info.sh @@ -2,4 +2,4 @@ # This file also gets execfile'd by python so don't do anything here besides set variables. UBUNTU_CODENAMES="trusty utopic vivid wily xenial yakkety zesty artful bionic cosmic disco eoan" DEBIAN_CODENAMES="jessie stretch buster sid" -FEDORA_CODENAMES="21 22 23 24 25 26 27 28 29 30 31" +FEDORA_CODENAMES="21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37" diff --git a/generate-rpm.sh b/generate-rpm.sh index 9fa7986..06d64b2 100755 --- a/generate-rpm.sh +++ b/generate-rpm.sh @@ -29,7 +29,7 @@ cat < $HOME/.rpmmacros %_tmppath $(pwd)/rpmbuild %_smp_mflags -j3 %_signature gpg -%_gpg_name 3565780E +%_gpg_name 5044912e %_gpgbin /usr/bin/gpg EOF @@ -58,7 +58,7 @@ cp nautilus-dropbox-$CURVER.tar.bz2 rpmbuild/SOURCES/ cat < rpmbuild/SPECS/nautilus-dropbox.spec %define glib_version 2.42.1 -%define nautilus_version 3.14.2 +%define nautilus_version 43.0 %define libgnome_version 2.32.1 %define pygobject3_version 3.14.0 %define pygpgme_version 0.3 @@ -75,7 +75,7 @@ BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id} -u -n) Requires: nautilus-extensions >= %{nautilus_version} Requires: glib2 >= %{glib_version} -Requires: libgnome >= %{gnome_version} +Requires: libgnome >= %{libgnome_version} Requires: python3 Requires: python3-gobject >= %{pygobject3_version} @@ -84,12 +84,13 @@ Requires: python3-gobject >= %{pygobject3_version} BuildRequires: nautilus-devel >= %{nautilus_version} BuildRequires: glib2-devel >= %{glib_version} BuildRequires: python3-docutils -BuildRequires: cairo-devel -BuildRequires: gtk3-devel -BuildRequires: atk-devel -BuildRequires: pango-devel -BuildRequires: python3 -BuildRequires: python3-gobject >= %{pygobject3_version} +BuildRequires: cairo-devel +BuildRequires: gcc +BuildRequires: gtk4-devel +BuildRequires: atk-devel +BuildRequires: pango-devel +BuildRequires: python3 +BuildRequires: python3-gobject >= %{pygobject3_version} %description Nautilus Dropbox is an extension that integrates the Dropbox web service with your GNOME Desktop. @@ -109,17 +110,8 @@ make %{?_smp_mflags} rm -rf \$RPM_BUILD_ROOT make install DESTDIR=\$RPM_BUILD_ROOT -if [ -d \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-2.0 ]; then - rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-2.0/*.la - rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-2.0/*.a - mkdir -p \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-3.0 - ln -s ../extensions-2.0/libnautilus-dropbox.so \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-3.0/ -elif [ -d \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-3.0 ]; then - rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-3.0/*.la - rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-3.0/*.a - mkdir -p \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-2.0 - ln -s ../extensions-3.0/libnautilus-dropbox.so \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-2.0/ -fi +rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-4/libnautilus-dropbox.{,l}a + %post /sbin/ldconfig @@ -128,8 +120,7 @@ fi if [ \$1 -gt 1 ] ; then # Old versions of the rpm delete the files in postun. So just in case let's make a backup copy. The backup copy will be restored in posttrans. - ln -f %{_libdir}/nautilus/extensions-3.0/libnautilus-dropbox.so{,.bak} - ln -f %{_libdir}/nautilus/extensions-2.0/libnautilus-dropbox.so{,.bak} + ln -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so{,.bak} fi EOF @@ -194,9 +185,9 @@ fi PROCS=`pgrep -x nautilus` for PROC in $PROCS; do - # Extract the display variable so that we can show a box. - # Hope they have xauth to localhost. - export `cat /proc/$PROC/environ | tr "\0" "\n" | grep DISPLAY` + # Extract the display variable so that we can show a box. + # Hope they have xauth to localhost. + export `cat /proc/$PROC/environ | tr "\0" "\n" | grep DISPLAY` zenity --question --timeout=30 --title=Dropbox --text='The Nautilus File Browser has to be restarted. Any open file browser windows will be closed in the process. Do this now?' > /dev/null 2>&1 if [ $? -eq 0 ] ; then @@ -227,20 +218,14 @@ fi %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -# Old versions of the rpm delete these files in postun. Fortunately we have saved a backup. -if [ ! -e %{_libdir}/nautilus/extensions-3.0/libnautilus-dropbox.so ]; then - if [ -e %{_libdir}/nautilus/extensions-3.0/libnautilus-dropbox.so.bak ]; then - mv -f %{_libdir}/nautilus/extensions-3.0/libnautilus-dropbox.so{.bak,} - fi -fi -if [ ! -e %{_libdir}/nautilus/extensions-2.0/libnautilus-dropbox.so ]; then - if [ -e %{_libdir}/nautilus/extensions-2.0/libnautilus-dropbox.so.bak ]; then - mv -f %{_libdir}/nautilus/extensions-2.0/libnautilus-dropbox.so{.bak,} +# Old versions of the rpm delete these files in postun. Fortunately we have saved a backup. +if [ ! -e %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so ]; then + if [ -e %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so.bak ]; then + mv -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so{.bak,} fi fi -rm -f %{_libdir}/nautilus/extensions-3.0/libnautilus-dropbox.so.bak -rm -f %{_libdir}/nautilus/extensions-2.0/libnautilus-dropbox.so.bak +rm -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so.bak %clean rm -rf \$RPM_BUILD_ROOT @@ -248,8 +233,7 @@ rm -rf \$RPM_BUILD_ROOT %files %defattr(-,root,root,-) %doc -%{_libdir}/nautilus/extensions-2.0/*.so* -%{_libdir}/nautilus/extensions-3.0/*.so* +%{_libdir}/nautilus/extensions-4/*.so* %{_datadir}/icons/hicolor/* %{_datadir}/nautilus-dropbox/emblems/* %{_bindir}/dropbox diff --git a/rpm_resources/.rpmmacros b/rpm_resources/.rpmmacros index 7f6d610..a24d71c 100644 --- a/rpm_resources/.rpmmacros +++ b/rpm_resources/.rpmmacros @@ -1,2 +1,3 @@ %_signature gpg -%_gpg_name 5044912E +%_gpg_name 5044912e +%_gpgbin /usr/bin/gpg diff --git a/rpm_resources/fedora-37-x86_64.cfg b/rpm_resources/fedora-37-x86_64.cfg new file mode 100644 index 0000000..edb18a1 --- /dev/null +++ b/rpm_resources/fedora-37-x86_64.cfg @@ -0,0 +1,176 @@ +config_opts['releasever'] = '37' +config_opts['target_arch'] = 'x86_64' +config_opts['legal_host_arches'] = ('x86_64',) + +config_opts['root'] = 'fedora-{{ releasever }}-{{ target_arch }}' + +config_opts['description'] = 'Fedora {{ releasever }}' +# fedora 31+ isn't mirrored, we need to run from koji +config_opts['mirrored'] = config_opts['target_arch'] != 'i686' + +config_opts['chroot_setup_cmd'] = 'install @{% if mirrored %}buildsys-{% endif %}build' + +config_opts['dist'] = 'fc{{ releasever }}' # only useful for --resultdir variable subst +config_opts['extra_chroot_dirs'] = [ '/run/lock', ] +config_opts['package_manager'] = 'dnf' +config_opts['bootstrap_image'] = 'registry.fedoraproject.org/fedora:{{ releasever }}' + +config_opts['dnf.conf'] = """ +[main] +keepcache=1 +debuglevel=2 +reposdir=/dev/null +logfile=/var/log/yum.log +retries=20 +obsoletes=1 +gpgcheck=0 +assumeyes=1 +syslog_ident=mock +syslog_device= +install_weak_deps=0 +metadata_expire=0 +best=1 +module_platform_id=platform:f{{ releasever }} +protected_packages= +user_agent={{ user_agent }} + +# repos + +[local] +name=local +baseurl=https://kojipkgs.fedoraproject.org/repos/f{{ releasever }}-build/latest/$basearch/ +cost=2000 +enabled={{ not mirrored }} +skip_if_unavailable=False + +{% if mirrored %} +[fedora] +name=fedora +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[updates] +name=updates +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-f$releasever&arch=$basearch +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[updates-testing] +name=updates-testing +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-f$releasever&arch=$basearch +enabled=0 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[fedora-debuginfo] +name=fedora-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-$releasever&arch=$basearch +enabled=0 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[updates-debuginfo] +name=updates-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-debug-f$releasever&arch=$basearch +enabled=0 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[updates-testing-debuginfo] +name=updates-testing-debuginfo +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-testing-debug-f$releasever&arch=$basearch +enabled=0 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +skip_if_unavailable=False + +[fedora-source] +name=fedora-source +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-source-$releasever&arch=$basearch +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +enabled=0 +skip_if_unavailable=False + +[updates-source] +name=updates-source +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-source-f$releasever&arch=$basearch +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-{{ releasever }}-primary +gpgcheck=1 +enabled=0 +skip_if_unavailable=False + +# modular + +[fedora-modular] +name=Fedora Modular $releasever - $basearch +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-modular-$releasever&arch=$basearch +# if you want to enable it, you should set best=0 +# see https://bugzilla.redhat.com/show_bug.cgi?id=1673851 +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary +skip_if_unavailable=False + +[fedora-modular-debuginfo] +name=Fedora Modular $releasever - $basearch - Debug +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-modular-debug-$releasever&arch=$basearch +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary +skip_if_unavailable=False + +[fedora-modular-source] +name=Fedora Modular $releasever - Source +metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-modular-source-$releasever&arch=$basearch +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-$releasever-primary +skip_if_unavailable=False + +[updates-modular] +name=Fedora Modular $releasever - $basearch - Updates +#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Modular/$basearch/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-modular-f$releasever&arch=$basearch +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch +skip_if_unavailable=False + +[updates-modular-debuginfo] +name=Fedora Modular $releasever - $basearch - Updates - Debug +#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Modular/$basearch/debug/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-modular-debug-f$releasever&arch=$basearch +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch +skip_if_unavailable=False + +[updates-modular-source] +name=Fedora Modular $releasever - Updates Source +#baseurl=http://download.fedoraproject.org/pub/fedora/linux/updates/$releasever/Modular/SRPMS/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=updates-released-modular-source-f$releasever&arch=$basearch +enabled=0 +repo_gpgcheck=0 +type=rpm +gpgcheck=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch +skip_if_unavailable=False +{% endif %} +""" From 586ad95ef7ed0ab40f8f3c0be212cad42675aa31 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Tue, 6 Dec 2022 18:09:19 -0800 Subject: [PATCH 2/7] Add scheduled canary build. (#110) * Add scheduled canary build. This feels like a necessary thing to have, especially in light of the GNOME 43 upgrade. * Move to correct folder. * Update installed packages. * add libgtk-4-dev for ubuntu Co-authored-by: Geoffry Song --- .github/workflows/canary.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/canary.yml diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml new file mode 100644 index 0000000..51cbac1 --- /dev/null +++ b/.github/workflows/canary.yml @@ -0,0 +1,32 @@ +name: Run canary builds +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '29 1 * * 1' + workflow_dispatch: +jobs: + ubuntu: + runs-on: ubuntu-latest + container: + image: ubuntu:devel + steps: + - name: Clone repo + uses: actions/checkout@v3 + - name: Install deps + run: apt-get update && apt-get install -y gnome-common libnautilus-extension-dev libgtk-4-dev python3-gi python3-docutils + - name: Test build + run: ./autogen.sh && make && make install + fedora: + runs-on: ubuntu-latest + container: + image: fedora:rawhide + steps: + - name: Clone repo + uses: actions/checkout@v3 + - name: Install deps + run: dnf install -y gnome-common nautilus-devel gtk4-devel python3-docutils python3-gobject + - name: Test build + run: ./autogen.sh && make && make install From 7ef9eb63c96009f71a509f9432dc3f2bef53d7f7 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Wed, 7 Dec 2022 11:24:55 -0800 Subject: [PATCH 3/7] Got the instructions and final packaging cleaned up. --- HOWTO_PACKAGE.md | 45 +++++++++++++++++++++++++++------------------ build_packages.py | 45 +++++++++++++++++++++------------------------ 2 files changed, 48 insertions(+), 42 deletions(-) diff --git a/HOWTO_PACKAGE.md b/HOWTO_PACKAGE.md index b2be738..0a666ca 100644 --- a/HOWTO_PACKAGE.md +++ b/HOWTO_PACKAGE.md @@ -2,24 +2,22 @@ This is a work-in-progress guide on how to build Ubuntu, Debian, and Fedora packages for nautilus-dropbox. It assumes you're building from -a 16.04 Ubuntu machine. +an Ubuntu 22.10 machine for the `.deb` build and a Fedora 37 machine for the `.rpm` build. 1. Obtain the signing tarball and extract all of the files into your `~/.gnupg` directory. If producing an RPM build, also import it into RPM with `sudo rpm --import /path/to/key`. -2. Install the build dependencies. +2. On a Debian/Ubuntu machine: + 1. Install dependencies: -This is a non-exhaustive list of what you'll need: + ``` + sudo apt-get install pbuilder debootstrap devscripts libnautilus-extension-dev cdbs gnome-common debian-archive-keyring python3-docutils + ``` -``` -sudo apt-get install pbuilder debootstrap devscripts libnautilus-extension-dev mock rpm expect createrepo cdbs gnome-common debian-archive-keyring python3-docutils -``` + 2. Copy `.pbuilderrc` to `~/.pbuilderrc` -3. On a Debian/Ubuntu machine: - 1. Copy .pbuilderrc to ~/.pbuilderrc - - 2. Create chroots for each of the Debian or Ubuntu builds you'll be doing. + 3. Create chroots for each of the Debian or Ubuntu builds you'll be doing. ``` sudo DIST=trusty ARCH=i386 pbuilder create --debootstrapopts --variant=buildd @@ -28,24 +26,35 @@ sudo apt-get install pbuilder debootstrap devscripts libnautilus-extension-dev m sudo DIST=jessie ARCH=amd64 pbuilder create --debootstrapopts --variant=buildd ``` - 3. Build all the packages with: `python3 build_packages.py deb` + 4. Build all the packages with: `python3 build_packages.py deb` 4. On a Fedora machine: - 1. Add yourself to the mock group (create it if it doesn't exist), and + 1. Install dependencies: + + ``` + sudo dnf install devscripts libnautilus-extension-dev mock rpm rpm-sign rpmdevtools rpmlint expect createrepo cdbs gnome-common python3-docutils rpm-build gawk nautilus-devel + ``` + + 2. Add yourself to the mock group (create it if it doesn't exist), and then logout and login for the group to take affect. `build_packages.py` will use `sudo` for a few of the commands, so add both your user account and root to the group. - 2. Copy rpm_resources/fedora-*.cfg to /etc/mock. + 3. Copy `rpm_resources/fedora-*.cfg` to `/etc/mock`. + + If you need to add new configs when we start targetting a new Fedora + version, you can find all the configs here: + https://github.com/rpm-software-management/mock. - If you need to add new configs when we start targetting a new Fedora version, - you can find all the configs here: https://github.com/rpm-software-management/mock + The configs in that repo are templatized, so you'll also have to manually + copy the template contents into your copy. - 3. Copy rpm_resources/.rpmmacros to ~/.rpmmacros + 4. Copy `rpm_resources/.rpmmacros` to `~/.rpmmacros` - 4. Build all the packages with: `python3 build_packages.py rpm` + 5. Build all the packages with: `python3 build_packages.py rpm` -5. Gather the built outputs from both machines, and put them in a TAR named nautilus-dropbox-release.tar.gz +5. Gather the built outputs from both machines, and put them in the repo root + (this step can be done on either machine). Run `python3 build_packages.py package`. 6. Update the ChangeLog with all the changes in the release. diff --git a/build_packages.py b/build_packages.py index f314ea1..9af6e0f 100644 --- a/build_packages.py +++ b/build_packages.py @@ -29,17 +29,17 @@ def generate_packages(self): assert self.system('rm -f /tmp/nautilus-dropbox-release.tar.gz') == 0 # Source - assert self.system('cp nautilus-dropbox-*.tar.bz2 /home/releng/result/packages') == 0 + assert self.system('cp nautilus-dropbox-*.tar.bz2 /tmp/dbx_build/result/packages') == 0 # Get dropbox.py assert self.system('make dropbox') == 0 assert self.system( - 'cp {REPO_DIR}/dropbox /home/releng/result/packages/dropbox.py'.format( + 'cp {REPO_DIR}/dropbox /tmp/dbx_build/result/packages/dropbox.py'.format( REPO_DIR=REPO_DIR, )) == 0 # Tar it up - assert self.system('cd /home/releng/result/; tar czvf /tmp/nautilus-dropbox-release.tar.gz *') == 0 + assert self.system('cd /tmp/dbx_build/result/; tar czvf /tmp/nautilus-dropbox-release.tar.gz *') == 0 def build_deb(self, dist, arch): assert self.system('sh generate-deb.sh') == 0 @@ -58,7 +58,7 @@ def build_deb(self, dist, arch): def generate_deb_repo(self, distro_upper, codenames, dist, archs): distro = distro_upper.lower() - result = '/home/releng/result/%s' % distro + result = '/tmp/dbx_build/result/%s' % distro assert self.system('rm -rf %s' % result) == 0 assert self.system('mkdir -p %s/pool/main' % result) == 0 for arch in archs: @@ -74,39 +74,39 @@ def generate_deb_repo(self, distro_upper, codenames, dist, archs): # Add pacakge symlinks files = os.listdir(os.path.join(result, 'pool', 'main')) - assert self.system('mkdir -p /home/releng/result/packages/%s' % distro) == 0 + assert self.system('mkdir -p /tmp/dbx_build/result/packages/%s' % distro) == 0 for f in files: if f.endswith('.deb'): - assert self.system('ln -s ../../%s/pool/main/%s /home/releng/result/packages/%s' % + assert self.system('ln -s ../../%s/pool/main/%s /tmp/dbx_build/result/packages/%s' % (distro, f, distro)) == 0 def generate_yum_repo(self, distro_upper, codenames, dist, archs, dist_name): distro = distro_upper.lower() - assert self.system('rm -rf /home/releng/result/fedora') == 0 - assert self.system('mkdir -p /home/releng/result/fedora/pool/') == 0 + assert self.system('rm -rf /tmp/dbx_build/result/fedora') == 0 + assert self.system('mkdir -p /tmp/dbx_build/result/fedora/pool/') == 0 for arch in archs: - assert self.system('cp %s/%s-%s/result/*.rpm /home/releng/result/fedora/pool' % (MOCK_OUT, dist, arch)) == 0 + assert self.system('cp %s/%s-%s/result/*.rpm /tmp/dbx_build/result/fedora/pool' % (MOCK_OUT, dist, arch)) == 0 - files = os.listdir('/home/releng/result/fedora/pool') + files = os.listdir('/tmp/dbx_build/result/fedora/pool') for f in files: - f = '/home/releng/result/fedora/pool/' + f + f = '/tmp/dbx_build/result/fedora/pool/' + f newname = f.replace(dist_name, 'fedora') os.rename(f, newname) old = os.getcwd() - os.chdir('/home/releng/result/fedora') + os.chdir('/tmp/dbx_build/result/fedora') try: assert self.system('DISTS="%s" sh %s/create-yum-repo.sh' % (codenames, old)) == 0 finally: os.chdir(old) # Add pacakge symlinks - assert self.system('mkdir -p /home/releng/result/packages/%s' % distro) == 0 - files = os.listdir('/home/releng/result/fedora/pool') + assert self.system('mkdir -p /tmp/dbx_build/result/packages/%s' % distro) == 0 + files = os.listdir('/tmp/dbx_build/result/fedora/pool') for f in files: if re.match(r'nautilus-dropbox-[0-9.-]*\.fedora\.(i386|x86_64)\.rpm', f): - assert self.system('ln -s ../../%s/pool/%s /home/releng/result/packages/%s' % + assert self.system('ln -s ../../%s/pool/%s /tmp/dbx_build/result/packages/%s' % (distro, f, distro)) == 0 def build_rpm(self, config): @@ -141,8 +141,9 @@ def build_rpm(self, config): self.system('cat %s/*.log >&2' % (mock_config_out,)) raise else: - assert self.system('sudo chown -R $(whoami):$(whoami) %s' % (mock_config_out,)) - assert self.system('find %s/ -name *.rpm | xargs /usr/bin/expect sign-rpm.exp' % ( + username = cmd('whoami').decode('utf-8') + assert self.system('sudo chown -R %s:%s %s' % (username, username, mock_config_out)) == 0 + assert self.system('find %s/ -name *.rpm -exec /usr/bin/expect sign-rpm.exp {} \\;' % ( mock_config_out,)) == 0 def build_all(self): @@ -154,11 +155,9 @@ def build_all(self): with open("distro-info.sh") as f: exec(f.read(), {}, info) - assert self.system('rm -rf /home/releng/result') == 0 - assert self.system('mkdir -p /home/releng/result/packages') == 0 + assert self.system('rm -rf /tmp/dbx_build/result') == 0 + assert self.system('mkdir -p /tmp/dbx_build/result/packages') == 0 - deb_created = False - rpm_created = False if len(sys.argv) == 1 or 'deb' in sys.argv: # Ubuntu self.build_deb('trusty', 'i386') @@ -169,16 +168,14 @@ def build_all(self): self.build_deb('jessie', 'i386') self.build_deb('jessie', 'amd64') self.generate_deb_repo('Debian', info['DEBIAN_CODENAMES'], 'jessie', ['amd64', 'i386']) - deb_created = True # Fedora if len(sys.argv) == 1 or 'rpm' in sys.argv: # Fedora dropped 32-bit support several versions ago. self.build_rpm('fedora-37-x86_64') self.generate_yum_repo('Fedora', info['FEDORA_CODENAMES'], 'fedora-37', ['x86_64'], 'fc37') - rpm_created = True - if deb_created and rpm_created: + if len(sys.argv) == 1 or 'package' in sys.argv: self.generate_packages() From 18779901f82d050d1c9056ad167d924988c51072 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Wed, 7 Dec 2022 11:39:02 -0800 Subject: [PATCH 4/7] Revert "Add scheduled canary build. (#110)" This reverts commit 586ad95ef7ed0ab40f8f3c0be212cad42675aa31. --- .github/workflows/canary.yml | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100644 .github/workflows/canary.yml diff --git a/.github/workflows/canary.yml b/.github/workflows/canary.yml deleted file mode 100644 index 51cbac1..0000000 --- a/.github/workflows/canary.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Run canary builds -on: - push: - branches: [ master ] - pull_request: - branches: [ master ] - schedule: - - cron: '29 1 * * 1' - workflow_dispatch: -jobs: - ubuntu: - runs-on: ubuntu-latest - container: - image: ubuntu:devel - steps: - - name: Clone repo - uses: actions/checkout@v3 - - name: Install deps - run: apt-get update && apt-get install -y gnome-common libnautilus-extension-dev libgtk-4-dev python3-gi python3-docutils - - name: Test build - run: ./autogen.sh && make && make install - fedora: - runs-on: ubuntu-latest - container: - image: fedora:rawhide - steps: - - name: Clone repo - uses: actions/checkout@v3 - - name: Install deps - run: dnf install -y gnome-common nautilus-devel gtk4-devel python3-docutils python3-gobject - - name: Test build - run: ./autogen.sh && make && make install From 4128fc42b7c894f1513e4237bbf999b14de5cb32 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Wed, 7 Dec 2022 12:56:54 -0800 Subject: [PATCH 5/7] Fix numbering. --- HOWTO_PACKAGE.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/HOWTO_PACKAGE.md b/HOWTO_PACKAGE.md index 0a666ca..71d16bb 100644 --- a/HOWTO_PACKAGE.md +++ b/HOWTO_PACKAGE.md @@ -28,7 +28,7 @@ an Ubuntu 22.10 machine for the `.deb` build and a Fedora 37 machine for the `.r 4. Build all the packages with: `python3 build_packages.py deb` -4. On a Fedora machine: +3. On a Fedora machine: 1. Install dependencies: ``` @@ -53,9 +53,9 @@ an Ubuntu 22.10 machine for the `.deb` build and a Fedora 37 machine for the `.r 5. Build all the packages with: `python3 build_packages.py rpm` -5. Gather the built outputs from both machines, and put them in the repo root +4. Gather the built outputs from both machines, and put them in the repo root (this step can be done on either machine). Run `python3 build_packages.py package`. -6. Update the ChangeLog with all the changes in the release. +5. Update the ChangeLog with all the changes in the release. -7. Tag the release and push the tag to GitHub. +6. Tag the release and push the tag to GitHub. From ef846989e8862f399e38f458c7520bc538a5132c Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Wed, 7 Dec 2022 12:57:19 -0800 Subject: [PATCH 6/7] Remove old unnecessary upgrade code. --- generate-rpm.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/generate-rpm.sh b/generate-rpm.sh index 06d64b2..95dbc43 100755 --- a/generate-rpm.sh +++ b/generate-rpm.sh @@ -118,11 +118,6 @@ rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-4/libnautilus-dropbox.{,l}a /usr/bin/update-desktop-database &> /dev/null || : /bin/touch --no-create %{_datadir}/icons/hicolor &>/dev/null || : -if [ \$1 -gt 1 ] ; then - # Old versions of the rpm delete the files in postun. So just in case let's make a backup copy. The backup copy will be restored in posttrans. - ln -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so{,.bak} -fi - EOF cat <<'EOF' >> rpmbuild/SPECS/nautilus-dropbox.spec @@ -218,13 +213,6 @@ fi %posttrans /usr/bin/gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : -# Old versions of the rpm delete these files in postun. Fortunately we have saved a backup. -if [ ! -e %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so ]; then - if [ -e %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so.bak ]; then - mv -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so{.bak,} - fi -fi - rm -f %{_libdir}/nautilus/extensions-4/libnautilus-dropbox.so.bak %clean From 7cd24ee27e545ea302eb68874ca976c66460fa24 Mon Sep 17 00:00:00 2001 From: Julia Pitts Date: Wed, 7 Dec 2022 13:07:07 -0800 Subject: [PATCH 7/7] Get rid of sketchy code that affects the user's abode. --- generate-rpm.sh | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/generate-rpm.sh b/generate-rpm.sh index 95dbc43..84036f7 100755 --- a/generate-rpm.sh +++ b/generate-rpm.sh @@ -121,24 +121,6 @@ rm \$RPM_BUILD_ROOT%{_libdir}/nautilus/extensions-4/libnautilus-dropbox.{,l}a EOF cat <<'EOF' >> rpmbuild/SPECS/nautilus-dropbox.spec -for I in /home/*/.dropbox-dist; -do - # require a minimum version of 1.0.0 - DROPBOX_VERSION="$I/VERSION" - if test -e "$DROPBOX_VERSION"; then - VERSION=`cat "$DROPBOX_VERSION"` - - case "$VERSION" in - 2.[0-9].*|1.*.*|0.*.*) - # Anything below 2.10 is deprecated! - # stop dropbox - pkill -xf $I/dropbox > /dev/null 2>&1 - sleep 0.5 - rm -rf "$I" - esac - fi -done - DEFAULTS_FILE="/etc/default/dropbox-repo" if [ ! -e "$DEFAULTS_FILE" ]; then