Bug 1023848

Summary: Review Request: closure-compiler - JavaScript minifier and checker
Product: [Fedora] Fedora Reporter: Zbigniew Jędrzejewski-Szmek <zbyszek>
Component: Package ReviewAssignee: Dridi Boukelmoune <dridi.boukelmoune>
Status: CLOSED RAWHIDE QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: medium    
Version: rawhideCC: dridi.boukelmoune, package-review
Target Milestone: ---Flags: dridi.boukelmoune: fedora-review+
gwync: fedora-cvs+
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2014-02-05 15:29:47 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1023832, 1024114, 1044580, 1053678    
Bug Blocks: 725733, 1024589    

Description Zbigniew Jędrzejewski-Szmek 2013-10-28 05:27:05 UTC
Spec URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler.spec
SRPM URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler-20131014-1.fc19.src.rpm
Description:
The Closure Compiler is a tool for making JavaScript download and run
faster. It is a true compiler for JavaScript. Instead of compiling
from a source language to machine code, it compiles from JavaScript to
better JavaScript. It parses your JavaScript, analyzes it, removes
dead code and rewrites and minimizes what's left. It also checks
syntax, variable references, and types, and warns about common
JavaScript pitfalls.

Fedora Account System Username: zbyszek

Note: currently doesn't build in koji because json is missing.

Comment 1 Zbigniew Jędrzejewski-Szmek 2013-10-30 03:01:22 UTC
So, I've now used this to build zlib.js, and it seems to work, yay!

Spec URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler.spec
SRPM URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler-20131014-2.fc19.src.rpm

Comment 2 Zbigniew Jędrzejewski-Szmek 2013-10-30 03:08:35 UTC
json dependency has been replaced by android-json-org-java, so only guava >= 15 dependency remains.

Comment 3 Dridi Boukelmoune 2013-12-02 06:48:12 UTC
I hope guava 15 will land soon on rawhide, because I'll review this one.

Comment 4 Dridi Boukelmoune 2013-12-05 08:24:48 UTC
I have a failing build on koji [1] which basically fails the same way when I run locally fedora-review with mock configured with rawhide.

The error message is:
> /usr/bin/build-jar-repository: Could not find json Java extension for this JVM
> /usr/bin/build-jar-repository: Could not find findbugs Java extension for this JVM
> /usr/bin/build-jar-repository: error: Some specified jars were not found for this jvm

Also I was wondering whether it is normal on rawhide to see fc20 dist tags [3] in dependencies:
> DEBUG util.py:266:  Getting requirements for closure-compiler-20131014-2.fc21.src
> DEBUG util.py:266:   --> javapackages-tools-3.4.1-3.fc21.noarch
> DEBUG util.py:266:   --> 1:java-1.7.0-openjdk-devel-1.7.0.60-2.4.3.1.fc21.x86_64
> DEBUG util.py:266:   --> ant-1.9.2-7.fc21.noarch
> DEBUG util.py:266:   --> maven-ant-tasks-2.1.3-4.fc20.noarch
> DEBUG util.py:266:   --> jarjar-1.4-6.fc21.noarch
> DEBUG util.py:266:   --> args4j-2.0.25-1.fc20.noarch
> DEBUG util.py:266:   --> guava-13.0-6.fc20.noarch
> DEBUG util.py:266:   --> android-json-org-java-4.3-0.1.r3.1.fc21.noarch
> DEBUG util.py:266:   --> jsr-305-0-0.16.20130910svn.fc21.noarch
> DEBUG util.py:266:   --> junit-4.11-7.fc21.noarch
> DEBUG util.py:266:   --> protobuf-java-2.5.0-5.fc20.x86_64
> DEBUG util.py:266:   --> rhino-1.7R4-6.fc21.noarch

[1] http://koji.fedoraproject.org/koji/taskinfo?taskID=6258651
[2] http://kojipkgs.fedoraproject.org//work/tasks/8652/6258652/build.log
[3] http://kojipkgs.fedoraproject.org//work/tasks/8652/6258652/root.log

Comment 5 Zbigniew Jędrzejewski-Szmek 2013-12-16 16:04:32 UTC
So, a new version:

Spec URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler.spec
SRPM URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler-20131118-1.fc19.src.rpm

Upstream has released a new version, so the package is updated to it.

There were bugs in the spec. The worst thing was that tools/maven-ant-tasks.jar
was bundled (used during build). Using the system-wide one proved hard, because the
build would crash with an obscure (for me) traceback. I read on the net that
this is because of incompatibility of maven-ant-tasks with maven3. Maybe.
The problem was easy enough to work around by removing one line from build.xml
which copies pom to build/, which is later unused anyway.

(In reply to Dridi Boukelmoune from comment #4)
> I have a failing build on koji [1] which basically fails the same way when I
> run locally fedora-review with mock configured with rawhide.
> 
> The error message is:
> > /usr/bin/build-jar-repository: Could not find json Java extension for this JVM
> > /usr/bin/build-jar-repository: Could not find findbugs Java extension for this JVM
> > /usr/bin/build-jar-repository: error: Some specified jars were not found for this jvm
This should be fixed.

But please note that the build will fail later because newer guava is required. If
I'm reading things correctly, http://koji.fedoraproject.org/koji/taskinfo?taskID=6258651
is done with guava 13.

> Also I was wondering whether it is normal on rawhide to see fc20 dist tags
> [3] in dependencies:
> > DEBUG util.py:266:  Getting requirements for closure-compiler-20131014-2.fc21.src
> > DEBUG util.py:266:   --> javapackages-tools-3.4.1-3.fc21.noarch
> > DEBUG util.py:266:   --> 1:java-1.7.0-openjdk-devel-1.7.0.60-2.4.3.1.fc21.x86_64
> > DEBUG util.py:266:   --> ant-1.9.2-7.fc21.noarch
> > DEBUG util.py:266:   --> maven-ant-tasks-2.1.3-4.fc20.noarch
> > DEBUG util.py:266:   --> jarjar-1.4-6.fc21.noarch
> > DEBUG util.py:266:   --> args4j-2.0.25-1.fc20.noarch
> > DEBUG util.py:266:   --> guava-13.0-6.fc20.noarch
> > DEBUG util.py:266:   --> android-json-org-java-4.3-0.1.r3.1.fc21.noarch
> > DEBUG util.py:266:   --> jsr-305-0-0.16.20130910svn.fc21.noarch
> > DEBUG util.py:266:   --> junit-4.11-7.fc21.noarch
> > DEBUG util.py:266:   --> protobuf-java-2.5.0-5.fc20.x86_64
> > DEBUG util.py:266:   --> rhino-1.7R4-6.fc21.noarch
No idea.

Package builds correctly for me now, also in mock, if I ensure that guava 15 is installed.

Comment 6 Zbigniew Jędrzejewski-Szmek 2013-12-16 16:06:00 UTC
Sorry, wrong URL:

Spec URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler.spec
SRPM URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler-20131118-1.fc20.src.rpm

Comment 7 Dridi Boukelmoune 2014-01-13 08:57:49 UTC
I've run f-r and go this:

Issues:
=======
- This seems like a Java package, please install fedora-review-plugin-java to
  get additional checks

It's not available in f19, and my packaging laptop is waiting for bug 1046040. I'm currently downloading f20 and I'll run a review again once I have it.

Comment 8 Dridi Boukelmoune 2014-01-28 10:55:58 UTC
Now that bug 1044580 is solved, I have an automated review but I still get the fedora-review-plugin-java issue.

From review.txt:
> Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13
> Command line :/usr/bin/fedora-review -b 1023848
> Buildroot used: fedora-rawhide-i386
> Active plugins: Generic, Shell-api, Java
> Disabled plugins: C/C++, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby
> Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG

$ rpm -qa fedora-review*
fedora-review-plugin-java-3.4.1-1.fc20.noarch
fedora-review-0.5.1-2.fc20.noarch

I've also tried with
fedora-review -b 1023848 --plugins Generic,Shell-api,Java,Java.guidelines

So I guess I'll review the rest manually and open a bz for fedora-review.

Comment 9 Dridi Boukelmoune 2014-02-01 16:09:43 UTC
Package Review
==============

Legend:
[x] = Pass, [!] = Fail, [-] = Not applicable, [?] = Not evaluated
[ ] = Manual review needed


Issues:
=======
- The javadoc subpackage description seems incomplete
  (eg. contains "the documentation for" %{summary})
- The licenses looks more like ASL 2.0 and MPL 1.1
  see the package com.google.javascript.rhino
- There is a new v20140110 release (but I know this review came late)
- Patches do not link to upstream bugs/comments/lists
  but it doesn't really need to do so
- Consider running the test suite in %check
- Missing explicit Requires for jpackage-utils
  see https://fedoraproject.org/wiki/Packaging:Java#BuildRequires_and_Requires
  Maybe guidelines should be updated
- Maybe add a synopsis to the man page, you could also use a markup language
  such as reStructuredText (rst) or markdown (md) for easier writing
  I can help with that =)
- The package should not require junit (only at build time)

===== MUST items =====

Generic:
[x]: Package is licensed with an open-source compatible license and meets
     other legal requirements as defined in the legal section of Packaging
     Guidelines.
[!]: License field in the package spec file matches the actual license.
     Note: Checking patched sources after %prep for licenses. Licenses found:
     "Apache (v2.0)", "MPL (v1.1) GPL (unversioned/unknown version)", "Unknown
     or generated". 15 files have unknown license. Detailed output of
     licensecheck in /home/dridi/fedora/_reviews/1023848-closure-
     compiler/licensecheck.txt
[x]: License file installed when any subpackage combination is installed.
[x]: Package contains no bundled libraries without FPC exception.
[x]: Changelog in prescribed format.
[x]: Sources contain only permissible code or content.
[-]: Package contains desktop file if it is a GUI application.
[-]: Development files must be in a -devel package
[x]: Package uses nothing in %doc for runtime.
[x]: Package consistently uses macros (instead of hard-coded directory names).
[x]: Package is named according to the Package Naming Guidelines.
[x]: Package does not generate any conflict.
[x]: Package obeys FHS, except libexecdir and /usr/target.
[-]: If the package is a rename of another package, proper Obsoletes and
     Provides are present.
[!]: Requires correct, justified where necessary.
[x]: Spec file is legible and written in American English.
[-]: Package contains systemd file(s) if in need.
[x]: Package is not known to require an ExcludeArch tag.
[-]: Large documentation must go in a -doc subpackage. Large could be size
     (~1MB) or number of files.
     Note: Documentation size is 20480 bytes in 1 files.
[x]: Package complies to the Packaging Guidelines
[x]: Package successfully compiles and builds into binary rpms on at least one
     supported primary architecture.
[x]: Package installs properly.
[x]: Rpmlint is run on all rpms the build produces.
     Note: There are rpmlint messages (see attachment).
[x]: If (and only if) the source package includes the text of the license(s)
     in its own file, then that file, containing the text of the license(s)
     for the package is included in %doc.
[x]: Package requires other packages for directories it uses.
[x]: Package must own all directories that it creates.
[x]: Package does not own files or directories owned by other packages.
[x]: All build dependencies are listed in BuildRequires, except for any that
     are listed in the exceptions section of Packaging Guidelines.
[x]: Package uses either %{buildroot} or $RPM_BUILD_ROOT
[x]: Package does not run rm -rf %{buildroot} (or $RPM_BUILD_ROOT) at the
     beginning of %install.
[x]: Macros in Summary, %description expandable at SRPM build time.
[x]: Package does not contain duplicates in %files.
[x]: Permissions on files are set properly.
[x]: Package use %makeinstall only when make install' ' DESTDIR=... doesn't
     work.
[x]: Package is named using only allowed ASCII characters.
[x]: Package do not use a name that already exist
[x]: Package is not relocatable.
[x]: Sources used to build the package match the upstream source, as provided
     in the spec URL.
[x]: Spec file name must match the spec package %{name}, in the format
     %{name}.spec.
[x]: File names are valid UTF-8.
[x]: Packages must not store files under /srv, /opt or /usr/local

===== SHOULD items =====

Generic:
[-]: If the source package does not include license text(s) as a separate file
     from upstream, the packager SHOULD query upstream to include it.
[!]: Final provides and requires are sane (see attachments).
[-]: Fully versioned dependency in subpackages if applicable.
     Note: No Requires: %{name}%{?_isa} = %{version}-%{release} in closure-
     compiler-javadoc
[?]: Package functions as described.
[!]: Latest version is packaged.
[x]: Package does not include license text files separate from upstream.
[!]: Patches link to upstream bugs/comments/lists or are otherwise justified.
[-]: Description and summary sections in the package spec file contains
     translations for supported Non-English languages, if available.
[?]: Package should compile and build into binary rpms on all supported
     architectures.
[!]: %check is present and all tests pass.
[x]: Packages should try to preserve timestamps of original installed files.
[x]: Packager, Vendor, PreReq, Copyright tags should not be in spec file
[x]: Sources can be downloaded from URI in Source: tag
[x]: Reviewer should test that the package builds in mock.
[x]: Buildroot is not present
[x]: Package has no %clean section with rm -rf %{buildroot} (or
     $RPM_BUILD_ROOT)
[x]: Dist tag is present (not strictly required in GL).
[x]: No file requires outside of /etc, /bin, /sbin, /usr/bin, /usr/sbin.
[x]: SourceX is a working URL.
[x]: Spec use %global instead of %define unless justified.

===== EXTRA items =====

Generic:
[x]: Rpmlint is run on all installed packages.
     Note: There are rpmlint messages (see attachment).
[x]: Spec file according to URL is the same as in SRPM.


Rpmlint
-------
Checking: closure-compiler-20131118-1.fc21.noarch.rpm
          closure-compiler-javadoc-20131118-1.fc21.noarch.rpm
          closure-compiler-20131118-1.fc21.src.rpm
closure-compiler.noarch: W: spelling-error Summary(en_US) minifier -> magnifier
closure-compiler.src: W: spelling-error Summary(en_US) minifier -> magnifier
3 packages and 0 specfiles checked; 0 errors, 2 warnings.




Rpmlint (installed packages)
----------------------------
# rpmlint closure-compiler-javadoc closure-compiler
closure-compiler.noarch: W: spelling-error Summary(en_US) minifier -> magnifier
2 packages and 0 specfiles checked; 0 errors, 1 warnings.
# echo 'rpmlint-done:'



Requires
--------
closure-compiler-javadoc (rpmlib, GLIBC filtered):
    jpackage-utils

closure-compiler (rpmlib, GLIBC filtered):
    /bin/sh
    android-json-org-java
    args4j
    guava
    java
    jpackage-utils
    jsr-305
    junit
    protobuf-java
    rhino



Provides
--------
closure-compiler-javadoc:
    closure-compiler-javadoc

closure-compiler:
    closure-compiler
    mvn(com.google.javascript:closure-compiler)



Source checksums
----------------
http://closure-compiler.googlecode.com/archive/v20131118.zip :
  CHECKSUM(SHA256) this package     : 58452e1aef9825565ca7361aab5db54e3f28690ee97011651161cc69b8b7419c
  CHECKSUM(SHA256) upstream package : f72cb3b1aa628540576328ca21bfe16a798ec39af90c8c3bcde8ffaeb627bacc
However, diff -r shows no differences


Jar and class files in source
-----------------------------
./closure-compiler-7f8a374ebc14/lib/junit.jar
./closure-compiler-7f8a374ebc14/lib/findbugs.jar
./closure-compiler-7f8a374ebc14/lib/android-json-org-java.jar
./closure-compiler-7f8a374ebc14/lib/js.jar
./closure-compiler-7f8a374ebc14/lib/guava.jar
./closure-compiler-7f8a374ebc14/lib/args4j.jar
./closure-compiler-7f8a374ebc14/lib/jarjar.jar
./closure-compiler-7f8a374ebc14/lib/protobuf.jar
./closure-compiler-7f8a374ebc14/lib/jsr-305.jar


Generated by fedora-review 0.5.1 (bb9bf27) last change: 2013-12-13
Command line :/usr/bin/fedora-review -b 1023848 -P java
Buildroot used: fedora-rawhide-x86_64
Active plugins: Generic, Shell-api, Java
Disabled plugins: C/C++, Python, fonts, SugarActivity, Ocaml, Perl, Haskell, R, PHP, Ruby
Disabled flags: EXARCH, EPEL5, BATCH, DISTTAG

Comment 10 Zbigniew Jędrzejewski-Szmek 2014-02-05 05:31:48 UTC
Thank you for the review.

> Issues:
> =======
> - The javadoc subpackage description seems incomplete
>   (eg. contains "the documentation for" %{summary})
I get:

Summary     : API documentation for closure-compiler
Description :
This package contains the API documentation for closure-compiler.

This is rather brief, but sufficient imho.

> - The licenses looks more like ASL 2.0 and MPL 1.1
>  see the package com.google.javascript.rhino
Changed.

> - There is a new v20140110 release (but I know this review came late)
Updated.

> - Patches do not link to upstream bugs/comments/lists
>   but it doesn't really need to do so
I don't think that upstream will be interested in those patches. Maybe the manpage once it's in final form can be upstreamed.

> - Consider running the test suite in %check
One test seems to require google-caja for work. When it is removed, there still are failures. I left the necessary commands ifdeffed-out in the spec file (enable with --define '_check 1'). Afaict, those are failures related to some test fixtures, possibly not important.

> - Missing explicit Requires for jpackage-utils
>   see https://fedoraproject.org/wiki/Packaging:Java#BuildRequires_and_Requires
Added.

>   Maybe guidelines should be updated
I think the guidelines are OK.

> - Maybe add a synopsis to the man page, you could also use a markup language
  such as reStructuredText (rst) or markdown (md) for easier writing
  I can help with that =)

I converted the manpage to docbook. It could use a bit of tweaking still. Patches welcome :)

> - The package should not require junit (only at build time)
Removed.

I think all issues are fixed (or justified).

Spec URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler.spec
SRPM URL: http://in.waw.pl/~zbyszek/fedora/closure-compiler-20140110-1.fc20.src.rpm

koji: 
http://koji.fedoraproject.org/koji/taskinfo?taskID=6493214

Comment 11 Dridi Boukelmoune 2014-02-05 06:56:02 UTC
(In reply to Zbigniew Jędrzejewski-Szmek from comment #10)
> Thank you for the review.
> 
> > Issues:
> > =======
> > - The javadoc subpackage description seems incomplete
> >   (eg. contains "the documentation for" %{summary})
> I get:
> 
> Summary     : API documentation for closure-compiler
> Description :
> This package contains the API documentation for closure-compiler.
> 
> This is rather brief, but sufficient imho.

Sorry, I looked at the wrong %{summary} at the time.
 
> I think all issues are fixed (or justified).

I think so too, approved !

Comment 12 Zbigniew Jędrzejewski-Szmek 2014-02-05 14:08:45 UTC
Thanks!

New Package SCM Request
=======================
Package Name: closure-compiler
Short Description: JavaScript minifier and checker
Owners: zbyszek
Branches: f20
InitialCC:

Comment 13 Gwyn Ciesla 2014-02-05 14:28:49 UTC
Git done (by process-git-requests).

Comment 14 Zbigniew Jędrzejewski-Szmek 2014-02-05 15:29:47 UTC
I'll close this now, since building for f20 is impossible until guava 15 is available, which I don't think is going to happen, because maven breaks in f20 when it is installed.