VOOZH about

URL: https://wiki.archlinux.org/title/Ruby_Gem_package_guidelines_(Italiano)

⇱ Ruby package guidelines - ArchWiki


Jump to content
From ArchWiki
Arch package guidelines

32-bitCLRCMakeCrossDKMSEclipseElectronFontFree PascalGNOMEGoHaskellJavaKDEKernel modulesLispMesonMinGWNode.jsNonfreeOCamlPerlPHPPythonR – – Rust - SecurityShellVCSWebWine

👁 Image
This article or section is a candidate for moving to developer-manual:package-guidelines/ruby.

Notes: This page is being migrated to the Developer Manual. Further changes should be contributed via merge request. (Discuss in Talk:Ruby package guidelines)

This document covers standards and guidelines on writing PKGBUILDs for software that uses ruby.

Package naming

For libraries, use ruby-$_name (where $_name is the upstream project name). For applications, use the project name (without the ruby- prefix) and optionally add ruby-$_name to provides.

Build and tests

Ruby packages should be built from upstream sources as this provides a transparent chain of trust for the build. To ensure integration with the existing set of Ruby packages, it is expected to run tests using ruby-rake or ruby-rspec.

Note To detect dependency changes in between releases of a project, have a close look at the .gemspec or Gemfile upon update.

Template

PKGBUILD
prepare() {
 cd "${_name}-${pkgver}"

 # update gemspec/Gemfile to allow newer version of the dependencies
 sed --in-place --regexp-extended 's|~>|>=|g' "${_name}.gemspec"
}

build() {
 cd "${_name}-${pkgver}"

 local _gemdir="$(gem env gemdir)"

 gem build "${_name}.gemspec"

 gem install \
 --local \
 --verbose \
 --ignore-dependencies \
 --build-root "tmp_install" \
 "${_name}-${pkgver}.gem"

 # remove unrepreducible files
 rm --force --recursive --verbose \
 "tmp_install/${_gemdir}/cache/" \
 "tmp_install/${_gemdir}/gems/${_name}-${pkgver}/vendor/" \
 "tmp_install/${_gemdir}/doc/${_name}-${pkgver}/ri/ext/"

 find "tmp_install/${_gemdir}/gems/" \
 -type f \
 \( \
 -iname "*.o" -o \
 -iname "*.c" -o \
 -iname "*.so" -o \
 -iname "*.time" -o \
 -iname "gem.build_complete" -o \
 -iname "Makefile" \
 \) \
 -delete

 find "tmp_install/${_gemdir}/extensions/" \
 -type f \
 \( \
 -iname "mkmf.log" -o \
 -iname "gem_make.out" \
 \) \
 -delete
}

check() {
 cd "${_name}-${pkgver}"

 local _gemdir="$(gem env gemdir)"

 GEM_HOME="tmp_install/${_gemdir}" rake test
}

package() {
 cd "${_name}-${pkgver}"

 cp --archive --verbose tmp_install/* "${pkgdir}"

 install --verbose -D --mode=0644 LICENSE --target-directory "${pkgdir}/usr/share/licenses/${pkgname}"
 install --verbose -D --mode=0644 *.md --target-directory "${pkgdir}/usr/share/doc/${pkgname}"
}

Tips and tricks

The gem is deriving the files to add with "git ls-files"

In this case you can add the following sed command to the prepare() function:

# we don't build from a git checkout
sed --in-place --regexp-extended 's|git ls-files|find . -type f -not -path "*/\.git/*"|' "${_name}.gemspec"

The upstream project is using "rspec" to run tests

In this case you can replace the code line in the check() function with the following:

GEM_HOME="tmp_install/${_gemdir}" rspec

See also