add new linter script & fix packages where needed
Linter will check packages submitted for CI build. If error was found, build will not be allowed. To ensure that all build.sh scripts are consistent and have at least minimal allowed quality, linter is permanently enabled for all branches and pull requests.
This commit is contained in:
parent
56c33a34ad
commit
8701462951
43
.cirrus.yml
43
.cirrus.yml
|
@ -3,6 +3,10 @@ container:
|
|||
cpu: 4
|
||||
memory: 8
|
||||
|
||||
##
|
||||
## When doing release builds (branch 'master'), update Docker image if
|
||||
## required.
|
||||
##
|
||||
docker_builder:
|
||||
name: Update docker image
|
||||
|
||||
|
@ -12,17 +16,38 @@ docker_builder:
|
|||
DOCKER_USERNAME: xeffyr
|
||||
DOCKER_PASSWORD: ENCRYPTED[abe4dc4418b40a4c5a0c1671e4018fd9cc3bcb811a71f87bdb35967ba721501f958d47d48a3d31ab9cac466b48f238a0]
|
||||
|
||||
update_script: |
|
||||
script: |
|
||||
bash ./scripts/build/ci/cirrus-ci_dispatcher.sh --update-docker
|
||||
|
||||
##
|
||||
## Perform basic check for errors in build.sh package scripts.
|
||||
## If error found, exit with error code to stop build.
|
||||
##
|
||||
task:
|
||||
name: Build
|
||||
name: Lint packages
|
||||
|
||||
timeout_in: 5m
|
||||
|
||||
depends_on:
|
||||
- Update docker image
|
||||
|
||||
script: |
|
||||
bash scripts/lint-packages.sh
|
||||
|
||||
##
|
||||
## Determine changes in the last push, find modified packages and
|
||||
## build them for aarch64/arm/i686/x86_64 architectures.
|
||||
##
|
||||
## Built packages are accessible from Cirrus CI web interface.
|
||||
##
|
||||
task:
|
||||
name: Build packages
|
||||
|
||||
# 2 hours is a maximal timeout available for free use.
|
||||
timeout_in: 120m
|
||||
|
||||
depends_on:
|
||||
- Update docker image
|
||||
- Lint packages
|
||||
|
||||
environment:
|
||||
TERMUX_MAKE_PROCESSES: 4
|
||||
|
@ -32,7 +57,7 @@ task:
|
|||
TERMUX_ARCH: i686
|
||||
TERMUX_ARCH: x86_64
|
||||
|
||||
# Do not use built-in git client provided by Cirrus as may
|
||||
# Do not use built-in git client provided by Cirrus as it may
|
||||
# cause problems when determining changed files.
|
||||
clone_script: |
|
||||
if [[ -z "$CIRRUS_PR" ]]; then
|
||||
|
@ -50,15 +75,19 @@ task:
|
|||
output_artifacts:
|
||||
path: "./debs/*.deb"
|
||||
|
||||
##
|
||||
## When doing release build (branch 'master'), upload built packages
|
||||
## to APT repository on Bintray.
|
||||
##
|
||||
task:
|
||||
name: Publish
|
||||
name: Upload packages to Bintray
|
||||
|
||||
only_if: $CIRRUS_BRANCH == 'master'
|
||||
|
||||
timeout_in: 60m
|
||||
|
||||
depends_on:
|
||||
- Build
|
||||
- Build packages
|
||||
|
||||
environment:
|
||||
BINTRAY_USERNAME: xeffyr
|
||||
|
@ -66,5 +95,5 @@ task:
|
|||
BINTRAY_GPG_SUBJECT: termux
|
||||
BINTRAY_GPG_PASSPHRASE: ENCRYPTED[854c09c78b3318a30d3c9094b1010dfebd4c71ad9173b64479eaafaa7e941b050afaa936ad635af3709382492828316f]
|
||||
|
||||
upload_script: |
|
||||
script: |
|
||||
bash ./scripts/build/ci/cirrus-ci_dispatcher.sh --upload
|
||||
|
|
|
@ -5,6 +5,7 @@ _TAG_VERSION=7.1.2
|
|||
_TAG_REVISION=33
|
||||
TERMUX_PKG_VERSION=${_TAG_VERSION}.${_TAG_REVISION}
|
||||
TERMUX_PKG_REVISION=7
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
TERMUX_PKG_DEPENDS="libc++, libexpat, libpng, libzopfli, zlib"
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ TERMUX_PKG_VERSION=3.0.2
|
|||
TERMUX_PKG_SRCURL=https://beyondgrep.com/ack-v${TERMUX_PKG_VERSION}
|
||||
TERMUX_PKG_SHA256=8e49c66019af3a5bf5bce23c005231b2980e93889aa047ee54d857a75ab4a062
|
||||
TERMUX_PKG_DEPENDS="perl"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=yes
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Public Domain"
|
|||
TERMUX_PKG_MAINTAINER="Leonid Plyushch <leonid.plyushch@gmail.com>"
|
||||
TERMUX_PKG_VERSION=3.1
|
||||
TERMUX_PKG_REVISION=4
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_METAPACKAGE=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ TERMUX_PKG_VERSION=20190515
|
|||
TERMUX_PKG_SRCURL=https://curl.haxx.se/ca/cacert.pem
|
||||
# If the checksum has changed, it may be time to update the package version:
|
||||
TERMUX_PKG_SHA256=cb2eca3fbfa232c9e3874e3852d43b33589f27face98eef10242a853d83a437a
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=yes
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://termux.com
|
|||
TERMUX_PKG_DESCRIPTION="Suggest installation of packages in interactive shell sessions"
|
||||
TERMUX_PKG_LICENSE="Apache-2.0"
|
||||
TERMUX_PKG_VERSION=1.39
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
TERMUX_LIBEXEC_DIR=$TERMUX_PREFIX/libexec/termux
|
||||
|
|
|
@ -2,7 +2,6 @@ TERMUX_PKG_HOMEPAGE=https://www.dartlang.org/
|
|||
TERMUX_PKG_DESCRIPTION="Dart is a general-purpose programming language"
|
||||
TERMUX_PKG_LICENSE="BSD"
|
||||
TERMUX_PKG_VERSION=2.4.1
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=yes
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
|
||||
# Dart uses tar and gzip to extract downloaded packages.
|
||||
|
|
|
@ -3,7 +3,6 @@ TERMUX_PKG_DESCRIPTION="A widely used XML scheme for writing documentation and h
|
|||
TERMUX_PKG_LICENSE="MIT"
|
||||
TERMUX_PKG_VERSION=4.5
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=yes
|
||||
TERMUX_PKG_DEPENDS="libxml2-utils"
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=http://developer.android.com/tools/help/index.html
|
|||
TERMUX_PKG_DESCRIPTION="Command which takes in class files and reformulates them for usage on Android"
|
||||
TERMUX_PKG_LICENSE="Apache-2.0"
|
||||
TERMUX_PKG_VERSION=$TERMUX_ANDROID_BUILD_TOOLS_VERSION
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Apache-2.0"
|
|||
TERMUX_PKG_MAINTAINER="Henrik Grimler @Grimler91"
|
||||
TERMUX_PKG_VERSION=1.1
|
||||
TERMUX_PKG_DEPENDS="termux-keyring"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://hunspell.github.io
|
|||
TERMUX_PKG_DESCRIPTION="American english dictionary for hunspell"
|
||||
TERMUX_PKG_LICENSE="LGPL-3.0"
|
||||
TERMUX_PKG_VERSION=20181025
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://hunspell.github.io
|
|||
TERMUX_PKG_DESCRIPTION="Russian dictionary for hunspell"
|
||||
TERMUX_PKG_LICENSE="LGPL-3.0"
|
||||
TERMUX_PKG_VERSION=20170303
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=http://man7.org/linux/man-pages/man3/glob.3.html
|
|||
TERMUX_PKG_DESCRIPTION="Shared library for the glob(3) system function"
|
||||
TERMUX_PKG_LICENSE="BSD 3-Clause"
|
||||
TERMUX_PKG_VERSION=0.6
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_BREAKS="libandroid-glob-dev"
|
||||
TERMUX_PKG_REPLACES="libandroid-glob-dev"
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://libcxx.llvm.org/
|
|||
TERMUX_PKG_DESCRIPTION="C++ Standard Library"
|
||||
TERMUX_PKG_LICENSE="NCSA"
|
||||
TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_ESSENTIAL=true
|
||||
|
||||
termux_step_post_make_install() {
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="A crypt(3) implementation"
|
|||
TERMUX_PKG_LICENSE="BSD 2-Clause"
|
||||
TERMUX_PKG_VERSION=0.2
|
||||
TERMUX_PKG_REVISION=2
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_DEPENDS="openssl"
|
||||
TERMUX_PKG_BREAKS="libcrypt-dev"
|
||||
TERMUX_PKG_REPLACES="libcrypt-dev"
|
||||
|
|
|
@ -2,7 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://www.musicpd.org
|
|||
TERMUX_PKG_DESCRIPTION="Music player daemon"
|
||||
TERMUX_PKG_LICENSE="GPL-2.0"
|
||||
TERMUX_PKG_VERSION=0.21.13
|
||||
TERMUX_PKG_REVISION=2
|
||||
TERMUX_PKG_REVISION=3
|
||||
TERMUX_PKG_SRCURL=https://github.com/MusicPlayerDaemon/MPD/archive/v$TERMUX_PKG_VERSION.tar.gz
|
||||
TERMUX_PKG_SHA256=0c71ff34aa4def30cd931977cbfe3deb6ec815a726b8c5343f1b8e5707136ebf
|
||||
TERMUX_PKG_DEPENDS="libc++, libcurl, libid3tag, libopus, libpulseaudio, libmpdclient, openal-soft, libvorbis, libsqlite, ffmpeg, libmp3lame, libbz2, libogg, libnfs, zlib"
|
||||
|
@ -18,7 +18,7 @@ TERMUX_PKG_EXTRA_CONFIGURE_ARGS="
|
|||
-Dpcre=disabled
|
||||
-Dsndio=disabled
|
||||
"
|
||||
TERMUX_PKG_CONFFILES="$TERMUX_PREFIX/etc/mpd.conf"
|
||||
TERMUX_PKG_CONFFILES="etc/mpd.conf"
|
||||
|
||||
termux_step_pre_configure() {
|
||||
# Certain packages are not safe to build on device because their
|
||||
|
|
|
@ -3,11 +3,11 @@ TERMUX_PKG_DESCRIPTION="A Music Player Daemon (MPD) client which submits informa
|
|||
TERMUX_PKG_LICENSE="GPL-2.0"
|
||||
TERMUX_PKG_MAINTAINER="Henrik Grimler @Grimler91"
|
||||
TERMUX_PKG_VERSION=0.22
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_REVISION=2
|
||||
TERMUX_PKG_SRCURL=https://github.com/MusicPlayerDaemon/mpdscribble/archive/v${TERMUX_PKG_VERSION}.tar.gz
|
||||
TERMUX_PKG_SHA256=9f6d73e1d0d44bf782c199732acc91bb07efc1c02ae04d037d711860dd8e4012
|
||||
TERMUX_PKG_DEPENDS="libcurl, mpd, libmpdclient, glib"
|
||||
TERMUX_PKG_CONFFILES="$TERMUX_PREFIX/etc/mpdscribble.conf"
|
||||
TERMUX_PKG_CONFFILES="etc/mpdscribble.conf"
|
||||
|
||||
termux_step_pre_configure () {
|
||||
NOCONFIGURE=1 ./autogen.sh
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Multilib binaries for cross-compilation"
|
|||
TERMUX_PKG_LICENSE="NCSA"
|
||||
TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_PKG_NO_STATICSPLIT=true
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="System header and library files from the Android NDK nee
|
|||
TERMUX_PKG_LICENSE="NCSA"
|
||||
TERMUX_PKG_VERSION=$TERMUX_NDK_VERSION
|
||||
TERMUX_PKG_REVISION=1
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
# This package has taken over <pty.h> from the previous libutil-dev
|
||||
# and iconv.h from libandroid-support-dev:
|
||||
TERMUX_PKG_CONFLICTS="libutil-dev, libgcc, libandroid-support-dev"
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=http://man7.org/linux/man-pages/man5/resolv.conf.5.html
|
|||
TERMUX_PKG_DESCRIPTION="Resolver configuration file"
|
||||
TERMUX_PKG_LICENSE="Public Domain"
|
||||
TERMUX_PKG_VERSION=1.2
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_CONFFILES="etc/resolv.conf"
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Apache-2.0"
|
|||
TERMUX_PKG_MAINTAINER="Henrik Grimler @Grimler91"
|
||||
TERMUX_PKG_VERSION=1.5
|
||||
TERMUX_PKG_DEPENDS="termux-keyring"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Apache-2.0"
|
|||
TERMUX_PKG_MAINTAINER="Henrik Grimler @Grimler91"
|
||||
TERMUX_PKG_VERSION=1.0
|
||||
TERMUX_PKG_DEPENDS="termux-keyring"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://github.com/termux
|
|||
TERMUX_PKG_DESCRIPTION="GPG public keys for the official Termux repositories"
|
||||
TERMUX_PKG_LICENSE="Apache-2.0"
|
||||
TERMUX_PKG_VERSION=1.2
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -2,6 +2,7 @@ TERMUX_PKG_HOMEPAGE=https://termux.com
|
|||
TERMUX_PKG_DESCRIPTION="Contains LICENSE files for common licenses"
|
||||
TERMUX_PKG_LICENSE="GPL-3.0"
|
||||
TERMUX_PKG_VERSION=1.0
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_PKG_ESSENTIAL=true
|
||||
|
||||
|
|
|
@ -3,6 +3,7 @@ TERMUX_PKG_DESCRIPTION="Basic system tools for Termux"
|
|||
TERMUX_PKG_LICENSE="GPL-3.0"
|
||||
TERMUX_PKG_VERSION=0.69
|
||||
TERMUX_PKG_REVISION=2
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_PKG_ESSENTIAL=true
|
||||
TERMUX_PKG_CONFFILES="etc/motd"
|
||||
|
|
|
@ -3,7 +3,6 @@ TERMUX_PKG_DESCRIPTION="A su wrapper for Termux"
|
|||
TERMUX_PKG_LICENSE="ISC"
|
||||
TERMUX_PKG_VERSION=2.3
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_BUILD_IN_SRC=true
|
||||
|
||||
termux_step_extract_package() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Apache-2.0"
|
|||
TERMUX_PKG_MAINTAINER="Leonid Plyushch <leonid.plyushch@gmail.com>"
|
||||
TERMUX_PKG_VERSION=2.0
|
||||
TERMUX_PKG_DEPENDS="termux-keyring"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -4,6 +4,7 @@ TERMUX_PKG_LICENSE="Apache-2.0"
|
|||
TERMUX_PKG_MAINTAINER="Leonid Plyushch <leonid.plyushch@gmail.com>"
|
||||
TERMUX_PKG_VERSION=2.0
|
||||
TERMUX_PKG_DEPENDS="termux-keyring"
|
||||
TERMUX_PKG_SKIP_SRC_EXTRACT=true
|
||||
TERMUX_PKG_PLATFORM_INDEPENDENT=true
|
||||
|
||||
termux_step_make_install() {
|
||||
|
|
|
@ -1,39 +0,0 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
|
||||
def main():
|
||||
package_dir = 'packages'
|
||||
for pkgdir_name in sorted(os.listdir(package_dir)):
|
||||
dir_path = package_dir + '/' + pkgdir_name
|
||||
build_sh_path = dir_path + '/build.sh'
|
||||
if not os.path.isfile(build_sh_path):
|
||||
sys.exit('No build.sh file in: ' + pkgdir_name)
|
||||
with open(build_sh_path) as build_sh:
|
||||
lines = build_sh.readlines()
|
||||
validate_package(pkgdir_name, lines)
|
||||
|
||||
def validate_package(package_name, lines):
|
||||
if len(lines) < 3:
|
||||
print('Too few lines in package: ' + package_name)
|
||||
return
|
||||
if not lines[0].startswith('TERMUX_PKG_HOMEPAGE='):
|
||||
print('The first line is not TERMUX_PKG_HOMEPAGE: ' + package_name)
|
||||
if not lines[1].startswith('TERMUX_PKG_DESCRIPTION='):
|
||||
print('The second line is not TERMUX_PKG_DESCRIPTION: ' + package_name)
|
||||
|
||||
line_number = 1
|
||||
for line in lines:
|
||||
if line.endswith(' \n'):
|
||||
print(package_name + ': Line ' + str(line_number) + ' has trailing whitespace')
|
||||
if line.startswith('TERMUX_PKG_REVISION='):
|
||||
value = line[len('TERMUX_PKG_REVISION='):].strip()
|
||||
if not re.match('[0-9]+', value):
|
||||
print(package_name + ': strange TERMUX_PKG_REVISION value "' + value + '"')
|
||||
|
||||
line_number += 1
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -0,0 +1,432 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
set -e -u
|
||||
|
||||
REPO_DIR=$(realpath "$(dirname "$0")/../")
|
||||
PACKAGES_DIR="$REPO_DIR/packages"
|
||||
|
||||
check_package_license() {
|
||||
local pkg_licenses=$1
|
||||
local license
|
||||
local license_ok=true
|
||||
|
||||
IFS=","
|
||||
for license in $pkg_licenses; do
|
||||
license=$(echo "$license" | sed -r 's/^\s*(\S+(\s+\S+)*)\s*$/\1/')
|
||||
|
||||
case "$license" in
|
||||
AFL-2.1|AFL-3.0|AGPL-V3|APL-1.0|APSL-2.0|Apache-1.0|Apache-1.1);;
|
||||
Apache-2.0|Artistic-License-2.0|Attribution|BSD|"BSD 2-Clause");;
|
||||
"BSD 3-Clause"|"BSD New"|"BSD Simplified"|BSL-1.0|Bouncy-Castle);;
|
||||
CA-TOSL-1.1|CC0-1.0|CDDL-1.0|CDDL-1.1|CPAL-1.0|CPL-1.0|CPOL);;
|
||||
CPOL-1.02|CUAOFFICE-1.0|CeCILL-1|CeCILL-2|CeCILL-2.1|CeCILL-B);;
|
||||
CeCILL-C|Codehaus|Copyfree|Day|Day-Addendum|ECL2|EPL-1.0|EPL-2.0);;
|
||||
EUDATAGRID|EUPL-1.1|EUPL-1.2|Eiffel-2.0|Entessa-1.0);;
|
||||
Facebook-Platform|Fair|Frameworx-1.0|GPL-2.0|GPL-3.0|GPL-3.0-only);;
|
||||
GPL-3.0-or-later|Go|HSQLDB|Historical|IBMPL-1.0|IJG|IPAFont-1.0);;
|
||||
ISC|IU-Extreme-1.1.1|ImageMagick|JA-SIG|JSON|JTidy|LGPL-2.0);;
|
||||
LGPL-2.1|LGPL-3.0|LPPL-1.0|Libpng|Lucent-1.02|MIT|MPL-2.0|MS-PL);;
|
||||
MS-RL|MirOS|Motosoto-0.9.1|Mozilla-1.1|Multics|NASA-1.3|NAUMEN);;
|
||||
NCSA|NOSL-3.0|NTP|NUnit-2.6.3|NUnit-Test-Adapter-2.6.3|Nethack);;
|
||||
Nokia-1.0a|OCLC-2.0|OSL-3.0|OpenLDAP|OpenSSL|Openfont-1.1);;
|
||||
Opengroup|PHP-3.0|PostgreSQL|"Public Domain"|"Public Domain - SUN");;
|
||||
PythonPL|PythonSoftFoundation|QTPL-1.0|RPL-1.5|Real-1.0|RicohPL);;
|
||||
SUNPublic-1.0|Scala|SimPL-2.0|Sleepycat|Sybase-1.0|TMate|UPL-1.0);;
|
||||
Unicode-DFS-2015|Unlicense|UoI-NCSA|"VIM License"|VovidaPL-1.0|W3C);;
|
||||
WTFPL|Xnet|ZLIB|ZPL-2.0|wxWindows);;
|
||||
|
||||
*)
|
||||
license_ok=false
|
||||
break
|
||||
;;
|
||||
esac
|
||||
done
|
||||
IFS=$old_ifs
|
||||
|
||||
if $license_ok; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
lint_package() {
|
||||
local package_script
|
||||
local package_name
|
||||
|
||||
package_script=$1
|
||||
package_name=$(basename "$(dirname "$package_script")")
|
||||
|
||||
echo "================================================================"
|
||||
echo
|
||||
echo "Package: $package_name"
|
||||
echo
|
||||
echo -n "Syntax check: "
|
||||
|
||||
local syntax_errors
|
||||
syntax_errors=$(bash -n "$package_script" 2>&1)
|
||||
|
||||
if [ -n "$syntax_errors" ]; then
|
||||
echo "FAILED"
|
||||
echo
|
||||
echo "$syntax_errors"
|
||||
echo
|
||||
|
||||
return 1
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
|
||||
echo
|
||||
|
||||
# Fields checking is done in subshell since we will source build.sh.
|
||||
(set +e +u
|
||||
local pkg_lint_error
|
||||
|
||||
# Certain fields may be API-specific.
|
||||
# Using API 24 here.
|
||||
TERMUX_PKG_API_LEVEL=24
|
||||
|
||||
. "$REPO_DIR/scripts/properties.sh"
|
||||
|
||||
. "$package_script"
|
||||
|
||||
pkg_lint_error=false
|
||||
|
||||
echo -n "TERMUX_PKG_HOMEPAGE: "
|
||||
if [ -n "$TERMUX_PKG_HOMEPAGE" ]; then
|
||||
if ! grep -qP '^https://.+' <<< "$TERMUX_PKG_HOMEPAGE"; then
|
||||
echo "NON-HTTPS"
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
else
|
||||
echo "NOT SET"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
|
||||
echo -n "TERMUX_PKG_DESCRIPTION: "
|
||||
if [ -n "$TERMUX_PKG_DESCRIPTION" ]; then
|
||||
str_length=$(($(wc -c <<< "$TERMUX_PKG_DESCRIPTION") - 1))
|
||||
|
||||
if [ $str_length -gt 100 ]; then
|
||||
echo "TOO LONG (allowed: 100 characters max)"
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
|
||||
unset str_length
|
||||
else
|
||||
echo "NOT SET"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
|
||||
echo -n "TERMUX_PKG_LICENSE: "
|
||||
if [ -n "$TERMUX_PKG_LICENSE" ]; then
|
||||
if [ "$TERMUX_PKG_LICENSE" = "custom" ]; then
|
||||
echo "CUSTOM"
|
||||
elif [ "$TERMUX_PKG_LICENSE" = "non-free" ]; then
|
||||
echo "NON-FREE"
|
||||
else
|
||||
if check_package_license "$TERMUX_PKG_LICENSE"; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "NOT SET"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_API_LEVEL" ]; then
|
||||
echo -n "TERMUX_PKG_API_LEVEL: "
|
||||
|
||||
if grep -qP '^[1-9][0-9]$' <<< "$TERMUX_PKG_API_LEVEL"; then
|
||||
if [ $TERMUX_PKG_API_LEVEL -lt 24 ] || [ $TERMUX_PKG_API_LEVEL -gt 28 ]; then
|
||||
echo "INVALID (allowed: number in range 24 - 28)"
|
||||
pkg_lint_error=true
|
||||
else
|
||||
echo "PASS"
|
||||
fi
|
||||
else
|
||||
echo "INVALID (allowed: number in range 24 - 28)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -n "TERMUX_PKG_VERSION: "
|
||||
if [ -n "$TERMUX_PKG_VERSION" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "NOT SET"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_REVISION" ]; then
|
||||
echo -n "TERMUX_PKG_REVISION: "
|
||||
|
||||
if grep -qP '^[1-9](\d{1,8})?$' <<< "$TERMUX_PKG_REVISION"; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: number in range 1 - 999999999)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_SKIP_SRC_EXTRACT" ]; then
|
||||
echo -n "TERMUX_PKG_SKIP_SRC_EXTRACT: "
|
||||
|
||||
if [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" = "true" ] || [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_SRCURL" ]; then
|
||||
echo -n "TERMUX_PKG_SRCURL: "
|
||||
|
||||
urls_ok=true
|
||||
for url in "${TERMUX_PKG_SRCURL[@]}"; do
|
||||
if [ -n "$url" ]; then
|
||||
if ! grep -qP '^https://.+' <<< "$url"; then
|
||||
echo "NON-HTTPS"
|
||||
urls_ok=false
|
||||
break
|
||||
fi
|
||||
else
|
||||
echo "NOT SET (one of the array elements)"
|
||||
urls_ok=false
|
||||
pkg_lint_error=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
unset url
|
||||
|
||||
if $urls_ok; then
|
||||
echo "PASS"
|
||||
fi
|
||||
unset urls_ok
|
||||
|
||||
echo -n "TERMUX_PKG_SHA256: "
|
||||
if [ -n "$TERMUX_PKG_SHA256" ]; then
|
||||
if [ "${#TERMUX_PKG_SRCURL[@]}" -eq "${#TERMUX_PKG_SHA256[@]}" ]; then
|
||||
sha256_ok=true
|
||||
|
||||
for sha256 in "${TERMUX_PKG_SHA256[@]}"; do
|
||||
if ! grep -qP '^[0-9a-fA-F]{64}$' <<< "${sha256}" && [ "$sha256" != "SKIP_CHECKSUM" ]; then
|
||||
echo "MALFORMED (SHA-256 should contain 64 hexadecimal numbers)"
|
||||
sha256_ok=false
|
||||
pkg_lint_error=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
unset sha256
|
||||
|
||||
if $sha256_ok; then
|
||||
echo "PASS"
|
||||
fi
|
||||
unset sha256_ok
|
||||
else
|
||||
echo "LENGTHS OF 'TERMUX_PKG_SRCURL' AND 'TERMUX_PKG_SHA256' ARE NOT EQUAL"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
else
|
||||
echo "NOT SET"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
else
|
||||
if [ "$TERMUX_PKG_SKIP_SRC_EXTRACT" != "true" ] && ! declare -F termux_step_extract_package > /dev/null 2>&1; then
|
||||
echo "TERMUX_PKG_SRCURL: NOT SET (set TERMUX_PKG_SKIP_SRC_EXTRACT to 'true' if no sources downloaded)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_METAPACKAGE" ]; then
|
||||
echo -n "TERMUX_PKG_METAPACKAGE: "
|
||||
|
||||
if [ "$TERMUX_PKG_METAPACKAGE" = "true" ] || [ "$TERMUX_PKG_METAPACKAGE" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_ESSENTIAL" ]; then
|
||||
echo -n "TERMUX_PKG_ESSENTIAL: "
|
||||
if [ "$TERMUX_PKG_ESSENTIAL" = "true" ] || [ "$TERMUX_PKG_ESSENTIAL" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_NO_STATICSPLIT" ]; then
|
||||
echo -n "TERMUX_PKG_NO_STATICSPLIT: "
|
||||
|
||||
if [ "$TERMUX_PKG_NO_STATICSPLIT" = "true" ] || [ "$TERMUX_PKG_NO_STATICSPLIT" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_BUILD_IN_SRC" ]; then
|
||||
echo -n "TERMUX_PKG_BUILD_IN_SRC: "
|
||||
|
||||
if [ "$TERMUX_PKG_BUILD_IN_SRC" = "true" ] || [ "$TERMUX_PKG_BUILD_IN_SRC" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_HAS_DEBUG" ]; then
|
||||
echo -n "TERMUX_PKG_HAS_DEBUG: "
|
||||
|
||||
if [ "$TERMUX_PKG_HAS_DEBUG" = "true" ] || [ "$TERMUX_PKG_HAS_DEBUG" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_PLATFORM_INDEPENDENT" ]; then
|
||||
echo -n "TERMUX_PKG_PLATFORM_INDEPENDENT: "
|
||||
|
||||
if [ "$TERMUX_PKG_PLATFORM_INDEPENDENT" = "true" ] || [ "$TERMUX_PKG_PLATFORM_INDEPENDENT" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_HOSTBUILD" ]; then
|
||||
echo -n "TERMUX_PKG_HOSTBUILD: "
|
||||
|
||||
if [ "$TERMUX_PKG_HOSTBUILD" = "true" ] || [ "$TERMUX_PKG_HOSTBUILD" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_FORCE_CMAKE" ]; then
|
||||
echo -n "TERMUX_PKG_FORCE_CMAKE: "
|
||||
|
||||
if [ "$TERMUX_PKG_FORCE_CMAKE" = "true" ] || [ "$TERMUX_PKG_FORCE_CMAKE" = "false" ]; then
|
||||
echo "PASS"
|
||||
else
|
||||
echo "INVALID (allowed: true / false)"
|
||||
pkg_lint_error=true
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_RM_AFTER_INSTALL" ]; then
|
||||
echo -n "TERMUX_PKG_RM_AFTER_INSTALL: "
|
||||
file_path_ok=true
|
||||
|
||||
while read -r file_path; do
|
||||
[ -z "$file_path" ] && continue
|
||||
|
||||
if grep -qP '^(\.\.)?/' <<< "$file_path"; then
|
||||
echo "INVALID (file path should be relative to prefix)"
|
||||
file_path_ok=false
|
||||
pkg_lint_error=true
|
||||
break
|
||||
fi
|
||||
done <<< "$TERMUX_PKG_RM_AFTER_INSTALL"
|
||||
unset file_path
|
||||
|
||||
if $file_path_ok; then
|
||||
echo "PASS"
|
||||
fi
|
||||
unset file_path_ok
|
||||
fi
|
||||
|
||||
if [ -n "$TERMUX_PKG_CONFFILES" ]; then
|
||||
echo -n "TERMUX_PKG_CONFFILES: "
|
||||
file_path_ok=true
|
||||
|
||||
while read -r file_path; do
|
||||
[ -z "$file_path" ] && continue
|
||||
|
||||
if grep -qP '^(\.\.)?/' <<< "$file_path"; then
|
||||
echo "INVALID (file path should be relative to prefix)"
|
||||
file_path_ok=false
|
||||
pkg_lint_error=true
|
||||
break
|
||||
fi
|
||||
done <<< "$TERMUX_PKG_CONFFILES"
|
||||
unset file_path
|
||||
|
||||
if $file_path_ok; then
|
||||
echo "PASS"
|
||||
fi
|
||||
unset file_path_ok
|
||||
fi
|
||||
|
||||
if $pkg_lint_error; then
|
||||
exit 1
|
||||
else
|
||||
exit 0
|
||||
fi
|
||||
)
|
||||
|
||||
local ret=$?
|
||||
|
||||
echo
|
||||
|
||||
return "$ret"
|
||||
}
|
||||
|
||||
linter_main() {
|
||||
local package_counter=0
|
||||
local problems_found=false
|
||||
local package_script
|
||||
|
||||
for package_script in "$@"; do
|
||||
if ! lint_package "$package_script"; then
|
||||
problems_found=true
|
||||
break
|
||||
fi
|
||||
|
||||
package_counter=$((package_counter + 1))
|
||||
done
|
||||
|
||||
if $problems_found; then
|
||||
echo "================================================================"
|
||||
echo
|
||||
echo "A problem has been found in '$(realpath --relative-to="$REPO_DIR" "$package_script")'."
|
||||
echo "Checked $package_counter packages before first error was detected."
|
||||
echo
|
||||
echo "================================================================"
|
||||
|
||||
return 1
|
||||
else
|
||||
echo "================================================================"
|
||||
echo
|
||||
echo "Checked $package_counter packages."
|
||||
echo "Everything seems ok."
|
||||
echo
|
||||
echo "================================================================"
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ $# -eq 0 ]; then
|
||||
linter_main "$PACKAGES_DIR"/*/build.sh || exit 1
|
||||
else
|
||||
linter_main "$@" || exit 1
|
||||
fi
|
Loading…
Reference in New Issue