1
0
mirror of https://github.com/jordansissel/fpm synced 2025-04-28 14:48:00 +02:00
Commit Graph

255 Commits

Author SHA1 Message Date
Jordan Sissel
399dca6e9c Fix failing test.
Looks like at some point django changed the admin tool from
"django-admin" to "django-admin.py"

Possibly this changed in upstream in Django on this commit, though I
don't know for certain:
85efc14a2e
2022-05-01 21:47:40 -07:00
Jordan Sissel
0dfe21bab7 Add test case for files with spaces and quotatation marks.
Testing, this new test case fails on v1.14.1 and *succeeds* as expected
after #1882 was merged.

Fixes #1886
2022-03-30 23:50:55 -07:00
Jordan Sissel
c1930fc465 Try to find the right python executable. Also don't require easy_install anymore.
As part of making "internal pip" the default (#1820), the test suite
needed two main changes:
1) Don't check for easy_install anymore
2) Try to find the right python executable.

On my Ubuntu 20.04 system, installing Python gives Python v3 which only
makes the "python3" executable available. To compensate, the test suite
now tries to find any of "python", "python2", or "python3" to use with
the test suite. When found, it will set the appropriate `--python-bin`
flag in fpm for each test.

For #1820
2021-11-09 21:29:41 -08:00
Jordan Sissel
9e3f75b628 By default, use pip for fetching and installing python packages.
This adds a new flag, --python-internal-pip, which is enabled by default.

"internal pip" means using 'python -m pip' to invoke pip. Ideally this will make fpm more correctly use pip.

Tested on python 2.7.17 and 3.6.9 on Ubuntu 18.04

All python tests passing 👍👍

Fixes #1820
2021-11-09 21:29:41 -08:00
Jordan Sissel
052656b480 'empty' packages now default to "all" architecture.
This feels like the right default because empty packages have no files
(especially no binary, architecture-specific files) and therefore should
be installable on any architecture.

Fixes #1846
2021-11-09 21:02:17 -08:00
Jordan Sissel
809c726944 Use correct constant name 2021-11-09 16:47:02 -08:00
seph
d69e648ce0 Skip tests which cannot be run due to missing dependencies.
Also fix at a failing deb lintian test which was failing due to a
missing 'lsb-base' dependency
2021-11-09 16:47:02 -08:00
Jordan Sissel
c4c0b32cfc Add test case for #1840 (deb compression creating invalid control.tar files)
Identified in #1840/#1841, `lintian` will error due to invalid
control.tar file, as shown below.

This test ensures that `lintian` will not crash. There were two options
I found: First, to run `lintian` and, when it crashes, it exits code 2.
Second, to run `lintian` with a single always-successful check. I chose
the second option because this allows me to rely on success/failure
(exit code 0 vs non-zero) in the event that `lintian` ever changes its
exit code, or that the crash exit code changes across older versions of
Debian.

```
% lintian example_1.0_amd64.deb
dpkg-deb: error: archive '/home/jls/projects/fpm/example_1.0_amd64.deb' uses unknown compression for member 'control.tar.bz2', giving up
/bin/tar: This does not look like a tar archive
/bin/tar: *control: Not found in archive
/bin/tar: Exiting with failure status due to previous errors
Skipping example_1.0_amd64.deb: could not read control data in /home/jls/projects/fpm/example_1.0_amd64.deb:  at /usr/share/perl5/Lintian/ProcessablePool.pm line 93.
```
2021-11-02 21:52:58 -07:00
Andrey Tikhonov
97dfed35ae When bzip2 is used for compression, use gzip on the control.tar.
This fixes a bug where fpm would create an invalid debian package file.
When `--deb-compression bzip2` was used, fpm would create
'control.tar.bz2' file inside the debian package. Debian does not
support bzip2-compressed control files. Per the deb(5) manpage:

> The second required member is named control.tar. It is a tar archive containing the package control information, either not compressed (supported since dpkg 1.17.6), or compressed with gzip (with .gz extension) or xz (with .xz extension, supported since 1.17.6)

With this commit, when bzip2 is chosen for data compression, fpm will
use gzip compression on the control.tar file.
2021-11-02 21:40:24 -07:00
Jordan Sissel
60de482c2c Make sure files we add to the package actually show up in the resulting output 2021-10-30 16:10:49 -07:00
Jordan Sissel
48200286c1 Add tests for FreeBSD packages.
- Files in the tarball should begin with / (#1811, #1844)
- Assert certain top-level manifest fields
- Assert manifest files are present

Idea from #1844
2021-10-30 16:10:49 -07:00
Jordan Sissel
4f51caf8fc rpm: Replace dash with underscore.
(note: fpm calls 'iteration' what rpm calls 'release')

rpmbuild will reject the `Release` tag containing a dash with the
following error (via fpm --verbose):

```
error: line 41: Illegal char '-' (0x2d) in: Release: 1-1 {:level=>:info}
Process failed: rpmbuild failed (exit code 1).
```

This patch copies the dash-to-underscore operation that is already
applied to the version field.

Adds tests for both iteration and version field.

Fixes: #1833
2021-09-22 00:09:42 -07:00
Jordan Sissel
16f1b4357f Reject invalid Provides fields for Debian packages
This resolves an issue caused by #1803 where a user was, historically, passing `--provides 'foo (<< 1.2.3)'` which was working correctly in prior versions of fpm but creating invalid Debian packages in the newer release.

This is a funny issue because previously fpm was removing the relationship text '(<< 1.2.3)' so it never made it into the resulting Debian package. Due to #1803, this text is now passed into the resulting package, and Debian package tooling rejects it.

Added tests to cover a few valid and invalid cases.

This change also adds code to validate other relationship fields (Depends, Suggests, etc) but does not actually do any validation.
2021-09-04 22:51:38 -07:00
Jordan Sissel
c7e7b18731 Fix failing test.
This test was failing on a lintian check which reports:

```
E: name: init.d-script-needs-depends-on-lsb-base etc/init.d/test (line 14)
```

Added `lsb-base` dependency to resolve it.
2021-09-04 17:32:39 -07:00
Jordan Sissel
541550a74d Allow versions in Provides field for Debian packages
This fixes #1788. This also reverts #280. For #280, at the time, this
change to ignore versions was correct. Two years after #280, Debian
began allowing `Provides` field to have versions.

This change also fixes bug in gem-to-deb conversion where previously an
incorrect Provides syntax would be generated (but thanks to #280,
removed), so this bug was only noticed after #280 was undone!

Computers are hard sometimes.

Added tests for gem-to-deb conversion specifically for the Provides
field.

Tested manually with Docker on Ubuntu 14.04 and 18.04 and results meet
expectations.

The history here is follows:
* In 2012, fpm was patched to remove version specifiers in Provides
  field because Debian didn't support it.
* In 2014, Debian dpkg[1] added support for versions in Provides field
* Somewhere between 2015-2018, Debian and Ubuntu included this new
  version of dpkg.
* Debian packaging policy docs (v4.4.0) was updated to allow versions
  in the Provides field.

Expected impacts:
* Older versions of dpkg/etc should _ignore_ the presence of a version
  specifier. Testing on Ubuntu 14.04 confirmed this.
* Newer versions of dpkg/etc should respect the presence of a version
  specifier. Testing on Ubuntu 18.04 confirmed this.

[1] https://launchpad.net/debian/+source/dpkg/1.17.11
2021-07-06 14:25:06 -07:00
Jordan Sissel
60bf90ae3c Only cleanup if needed
This fixes a warning when running `rspec`
2021-07-06 14:25:06 -07:00
Jordan Sissel
82580bb8e7 Add --deb-compression test coverage for #1760 2021-06-19 00:39:19 -07:00
Jordan Sissel
2b6e70b6fa Use rspec's skip feature to help show any skipped tests.
The previous method using :if actually hides the test entirely from the run.
Now an rspec run will correctly(I hope?) show any skipped tests. The
goal is to remind me that sometimes my dev environment is missing
important tooling needed to fully test fpm.

Also: Skip pacman tests if bsdtar and zstd programs are missing.
2021-06-19 00:09:49 -07:00
Steve Kamerman
cc0a4e7369 Fixed Debian platform tag for aarch64/arm64 2021-06-17 07:58:02 -07:00
Jose
9a16e43e4e changed xz for zst 2021-01-19 13:06:50 -08:00
Jordan Sissel
fbbb80fd53 Skip snap package tests on ruby 1.9 and 2.0 2019-02-23 22:00:15 -08:00
Jordan Sissel
3895fccec9 Typo. I forgot String#any? doesn't exist. 2019-02-23 22:00:15 -08:00
Jordan Sissel
b269c81ebe Fix travis check 2019-02-23 22:00:15 -08:00
Jordan Sissel
62fcf8c230 Disable another test that fails on travis, but not locally... 2019-02-23 22:00:15 -08:00
Jordan Sissel
e8be82ebdc Disable certain tests on travis because they fail, and we don't have private access to the debug feature, so there's nothing we can do to debug it at this time. 2019-02-23 22:00:15 -08:00
Jordan Sissel
b8fc631327 Disable triggerflags and triggerindex checks to make tests pass.
I'm not sure why this fails, but it seems to fail mostly on newer
rpm/rpmbuild systems. Maybe my arr-pm library is incorrectly parsing
these rpms somehow? Anyway... the tests are passing now.
2019-02-23 22:00:15 -08:00
Jordan Sissel
51067be1a5 Fix regression in python scripts #! line.
* Target python3 (newer djangos require it)
* Hardcode the django-admin path because easy_install's path/to/bin
  discovery is not working anymore.
2019-02-23 22:00:15 -08:00
Jordan Sissel
7a4372eaa0 Fix .attributes default value test
I think this test regression was introduced in 8f2dd451.
2019-02-23 22:00:15 -08:00
Morgan Rhodes
1f2f950581 Use fix_dependency when populating debian Replaces field (#1442)
The `Replaces` field needs to be formated 'package (operator version)'.
This makes use of the `fix_dependency` method for consistent formatting
with other dependencies.
2018-10-25 10:23:16 -07:00
Kyle Fazzari
8f6f285271 Introduce support for snap packages (#1490)
[Snaps][1] are self-contained squashfs images. Add basic support for
using them as inputs and outputs.

Typically Snapcraft is used to create snaps, but #1149 indicated a
desire to not use Snapcraft, so the snap is created natively, using
mksquashfs at the end to actually create the squashfs image. This may
not work for all use-cases (e.g. when the source doesn't already have
its dependencies bundled).

[1]: https://snapcraft.io/

Resolve #1181

Signed-off-by: Kyle Fazzari <kyrofa@ubuntu.com>
2018-10-16 15:59:17 -07:00
Omer Katz
446b49c7c4 Added ruby 2.5 to the build matrix (#1532)
* Added ruby 2.5 to the build matrix.

* Require "date" since it's missing and failing a test.
2018-10-15 21:14:04 -07:00
Jordan Sissel
3ab03e495f Set --no-cpan-test aka attributes[:cpan_test?]=false when doing a test package for cpan. This should make the test suite pass. 2018-07-03 22:05:59 -07:00
Alexey Stepanov
384f54769f Add tests for python PEP0508 tags 2018-04-14 19:55:08 -07:00
Nemanja Boric
139793c8b3 Allow source=dest/ syntax for symlinks
PR #1253, while fixed the bug where `source.link=dest/source.link`
resulted in `source.link=dest/source.link/source.link` introduced a bug
where `source=dest/` syntax stopped working for symlinks (it is ok for
files). This is now fixed, as the symlink source now behaves the same as
it would with a single file input. Test case testing this behaviour is
also added.

Fixes #1395
2017-09-11 09:36:10 -07:00
Jordan Sissel
78853a81c9 Use 'false' not 'FALSE' constant 2017-07-20 14:12:18 -07:00
Thiago Figueiró
d2a71442c1 Add tar spec for #1123 2017-07-20 14:12:18 -07:00
Nemanja Boric
fcd4dfd631 In case of a=b syntax where a is symlink, don't create directory (#1253)
Previously, if the symlink is included into the package and specified
with

my-sym-link.so=/usr/lib/my-sym-link.so

fpm would create directory, and put the
symlink inside `/usr/lib/my-sym-link.so/my-sym-link.so
which is very surprising and it doesn't follow the same
pattern as file copying is doing.

Fixes #1135
2017-07-20 14:00:21 -07:00
ServiusHack
a3ddf38b84 Fix copy_entry for symlinks (#1348)
* Add test for copying symlinks

The test explicitly sets `preserve=true` and `remove_destination=true`
to show the currently broken behavior.

* Fix copy_entry for symlinks

The fourth argument to FileUtils.copy_entry is dereference_root to
which the value of remove_destination was passed.

The fix now passes the parameters in the required position.
2017-07-20 13:11:28 -07:00
Philippe Poilbarbe
c2db5985f6 Added --deb-interest-noawait and --deb-activate-noawait (#1225) (#1359) 2017-07-20 13:05:03 -07:00
Dan Kegel
14c4819e41 Implement reproducible gem -> deb conversion (#1360)
* Add option --source-date-epoch-default and implement for deb output.

This is the first step towards supporting bit-for-bit identical
output files given identical inputs.

Alas, Apple's ar is not too good at reading gnu ar archives,
so always use ar_cmd to find ar.

* deb: remove lines duplicated in a tragic merge conflict

Probably introduced by 62d0060178 and not removed by 500f0c052fb52

* Add options --source-date-epoch-from-changelog and --gem-stagingdir to support bit-for-bit reproducible gem -> deb conversion

In those cases where we can get the release date out of the changelog,
use it; otherwise fall back to the value given by SOURCE_DATE_EPOCH aka --source-date-epoch-default.

--gem-stagingdir is a bit of a kludge, only needed because no
compiler supports https://reproducible-builds.org/specs/build-path-prefix-map/ yet.
Could have been global option, but not sure any other package handler
invokes compilers?  Could hoist it up later.

Also:
- Defer initializing staging_path so subclasses can sneak in new value
- gem: remove build files

* gem: handle a few more gem changelog variants

* gem: also remove mkmf.log; lets ffi, kgio, raindrops, and ruby-ldap build reproducibly.

* deb: don't expect diffoscope to be installed in /usr/bin.  Lets it be found on mac.

* gem: document new options
2017-07-20 12:33:14 -07:00
Nick Griffiths
719fec630c Fix weird clipboard fart 2016-12-30 20:01:47 +13:00
Nick Griffiths
d72ea6c625 Fix for #1248 - fix prefix behaviour 2016-12-30 19:57:15 +13:00
Jordan Sissel
40aa7cf5ca Move fpm version query behavior to run method.
A bug pointed out by #1162 showed that `fpm --version` would fail when
a .fpm file was loaded.

Moving the short `fpm --version` handling to the `run` method lets us do
this check before we load FPMOPTS env or .fpm files.

Updated the tests to only try calling with a lone `-v` or `--version`
flag to verify this works with and without a .fpm file.

Fixes #1162 and #1125. Original work by @drwl!
2016-09-11 23:48:39 -07:00
Andrew Lee
a6f25b9fda Fix --version when .fpm file exists 2016-09-11 23:48:17 -07:00
Matt Sharpe
0e9e8f0a43 Add long flag options for chdir, input, and output
The flags for chdir, input, and output aren't immediately intuitive
as to what they're short for. This commit adds long versions and a
spec stub for chdir. Resolves #1187.
2016-09-02 17:19:12 +10:00
Jordan Sissel
40ec0c3576 Merge pull request #1139 from luto/bugfix/1124
fix --workdir not having an effect on the build and staging dirs, fixes #1124
2016-07-25 16:14:44 -07:00
Andreas Zuber
8add9bcdd6 gem: make it posssible to set the shebang
This makes it possible to create packages from gems for ruby versions
which are not currently installed on the machine you build the package on.
2016-07-22 09:02:39 +02:00
luto
3338aa8f4b remove trailing slash from --prefix option in rpm-packages, fixes #819 2016-06-23 02:18:01 +02:00
luto
454754064f fix --workdir not having an effect on the build and staging dirs, fixes #1124 2016-06-22 01:50:44 +02:00
Nick Griffiths
66e59e79e8 Support building a virtualenv from local requirements.txt 2016-06-18 13:37:24 -07:00