Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Der Weg zur ersten Millionen....

Renee
April 13, 2016

Der Weg zur ersten Millionen....

Um alle möglichen Mojolicious, Dancer, Dancer2 und Catalyst Plugins zu testen, wurde eine kleine Anwendung geschrieben, so dass ich mittlerweile bei über 1 Millionen übermittelten CPAN-Tests bin.

Renee

April 13, 2016
Tweet

More Decks by Renee

Other Decks in Programming

Transcript

  1. Tests waren nicht das Ziel... • Die Tests sind nur

    ein Nebenprodukt der Arbeit. • Das eigentliche Ziel ist ein ganz anderes • Ich werde hier einige markante Wegstellen zeigen • Das eigentliche Ziel war...
  2. Task::MojoliciousPlugins::PerlAcademy • Task::-Module nur Auflistung von Abhängigkeiten • In diesem

    Falle alle funktionsfähigen Mojolicious-Plugins auf Schulungsrechner installieren
  3. Probleme • Welche Plugins gibt es? • Welche funktionieren mit

    der aktuellen Mojolicious-Version? • Welche funktionieren mit der aktuellen Perl- Version?
  4. Meta::CPAN • Auslesen welche Mojolicious-Plugins es gibt • Welche Versionen

    sind aktuell? • Unter welcher URL sind die zu finden? • 02packages.txt.gz • MetaCPAN::Client
  5. my $url = 'http://www.cpan.org/modules/' . '02packages.details.txt.gz'; getstore $url, '/tmp/test.txt.gz'; my

    $parser = Parse::CPAN::Packages->new( '/tmp/test.txt.gz' ); my @distributions = $parser->latest_distributions; my %modules; for my $dist ( @distributions ) { my $name = $dist->dist; next if $name !~ m!^Mojo (?:X|licious)?-!x; my $version = $dist->version; $modules{$name} = $version; }
  6. my $mcpan = MetaCPAN::Client->new( ua => HTTP::Tiny->new(), ); for my

    $name ( keys %modules ) { my $releases = $mcpan->release( { all => [ { distribution => $name }, { version => $version } ] } )->next; my $release = $releases ? $releases : $mcpan->release( $name ); my $abstract = $release->abstract; printf “%s (%s): %s\n see %s“, $name, $modules{$name}, $abstract, $release->download_url; }
  7. Zwischenstopp • Es sind jetzt alle Plugins bekannt • Und

    können mit dem installierten Perl u. Mojolicious getestet werden • Darstellung auf einer statischen Webseite für einen schnellen Überblick
  8. Probleme • Wie sieht es mit anderen Perl-Versionen (Developer-Releases, …)

    aus? • Es soll nicht jedesmal alles getestet werden (ca. 400 Plugins) auch wenn sich nichts geändert hat.
  9. perlbrew, SQLite • Mit perlbrew kann man sehr leicht mehrere

    Perl-Versionen nebeneinander betreiben → Alternative: plenv • Ausführen von Programmen auf allen installierten Versionen
  10. perlbrew perlbrew install 5.23.8 perlbrew use 5.23.8 perl -v perlbrew

    install 5.22.1 perlbrew use 5.22.1 perl -v perlbrew exec perl -v
  11. Zwischenstopp • Es werden schon frühzeitig Probleme mit zukünftigen Perl-Versionen

    erkannt • SQLite ist extrem genial um schnell eine Datenbank aufzubauen. • Wunsch im #mojo-IRC: Bei Fehlern soll die Fehlermeldung erreichbar sein
  12. Probleme • Durch die Speicherung der Fehlermeldungen wurde die SQLite-DB

    zu groß → Zugriffszeiten zu lang → Umstieg auf PostgreSQL
  13. Probleme • Es werden nicht immer die neuesten Versionen der

    Abhängigkeiten getestet • Wenn zu viele Module schon installiert sind, fallen Fehler in der Liste der Abhängigkeiten nicht auf → Abhängigkeiten werden nicht aufgelistet, sind aber durch andere Plugins schon installiert
  14. local::lib • Ermöglicht die Installation von Modulen in komplett eigenständigen

    Verzeichnissen → Jede Mojolicious-Version wird in ein eigenes Verzeichnis installiert → Jedes Plugin bekommt ein eigenes Verzeichnis, dadurch keine Kenntnis der vorher installierten Plugins
  15. „Problem“ • Soll ich die Ergebnisse nur für mich behalten?

    • Ich freue mich über Testergebnisse meiner Module → CPANTester.org
  16. App::cpanminus::reporter • Nach der Installation einmal konfigurieren • Nach der

    Installation von Modulen einfach cpanm-reporter --build-dir $dir
  17. Problem • Rückmeldungen der CPANTester-Gurus Slaven und Andreas • „Reportangabe

    zu Perl-Version passt nicht zu Angabe in den Tests“ • „Warum schickst Du so viele Testergebnisse“ • „…“
  18. Umstellung der Programmaufrufe PERL5LIB=/mojolib perlbrew --with perl-5.23.8 \ cpanm --local-lib

    $tempdir $pluginname $perlbrew_path/perl-5.23.8/bin/cpanm-reporter \ --build-dir $builddir
  19. „Problem“ • Nicht alle Autoren reagieren auf die Mails von

    CPANTesters.org • Oder sind nicht mehr sehr aktiv
  20. Github • Die meisten Plugins sind auf Github, macht das

    Patchen sehr einfach – Wer einen Account hat, kann auf das Repo gehen, auf Bearbeiten klicken, speichern, PullRequest erstellen • Einige PullRequests wurden innerhalb von „Sekunden“ angenommen, andere warten sein über einem Jahr...
  21. Übersicht • Parse::CPAN::Packages + MetaCPAN::Client • perlbrew • cpanminus +

    local::lib • SQLite vs. PostgreSQL • CPANTesters • Github mit PullRequests
  22. Ausblick • Aufbau der Testinfrastruktur für eigene Webprojekte • Aktuelles

    Developer-Release von Perl in allen möglichen Konfigurationen