SlideShare una empresa de Scribd logo
1 de 87
Descargar para leer sin conexión
Github,
Travis­CI
& Perl
Dave Cross
dave@perlhacks.com
@davorg
Github is Awesome
Github is Awesome Because
Github is Awesome Because
● Git
Github is Awesome Because
● Git
● Social coding
Github is Awesome Because
● Git
● Social coding
● Free
Github is Awesome Because
● Git
● Social coding
● Free
● Octocat
Github is Awesome Because
API
APIs are Awesome
APIs allow you to 
add cool features to 
Github
APIs are Awesome
APIs allow other 
people to add cool 
features to Github
APIs are Awesome
APIs allow other 
people to add cool 
features to Github
APIs are Awesome
APIs allow whole 
ecosystem of cool 
new toys
Continuous Integration
Continuous Integration
● Source code control is awesome
Continuous Integration
● Source code control is awesome
● Units tests are awesome
Continuous Integration
● Source code control is awesome
● Units tests are awesome
● Continuous integration is running 
unit tests whenever you commit code
Continuous Integration
● Source code control is awesome
● Units tests are awesome
● Continuous integration is running 
unit tests whenever you commit code
● Which is awesome
Travis­CI is Awesome
Travis­CI is Awesome
● Travis­CI monitors your Github projects
Travis­CI is Awesome
● Travis­CI monitors your Github projects
● Watches for commits
Travis­CI is Awesome
● Travis­CI monitors your Github projects
● Watches for commits
● Runs unit tests
Travis­CI is Awesome
● Travis­CI monitors your Github projects
● Watches for commits
● Runs unit tests
● Reports success or failure
Travis­CI is Awesome
● Travis­CI monitors your Github projects
● Watches for commits
● Runs unit tests
● Reports success or failure
● Which is awesome
Travis­CI & Perl
● Easy to enable Travis­CI for Perl projects
Travis­CI & Perl
● Easy to enable Travis­CI for Perl projects
● Just add a file to your repos
Travis­CI & Perl
● Easy to enable Travis­CI for Perl projects
● Just add a file to your repos
● .travis.yml
Travis­CI & Perl
● Easy to enable Travis­CI for Perl projects
● Just add a file to your repos
● .travis.yml
● Sign up with Travis
Travis­CI & Perl
● Easy to enable Travis­CI for Perl projects
● Just add a file to your repos
● .travis.yml
● Sign up with Travis
● Activate project
.travis.yml
language: perl
perl:
  ­ "5.18"
  ­ "5.16"
  ­ "5.14"
(Sidebar)
● No Perl 5.20 support yet
● Planned but not implemented
● There is a workaround
● See http://mgnm.at/travis520
Sign Up With Travis­CI
Sign Up With Travis­CI
● http://travis­ci.org/
Sign Up With Travis­CI
● http://travis­ci.org/
● Sign in with your Github account
Sign Up With Travis­CI
Sign Up With Travis­CI
Integrating Continuously
● Now you're set up
Integrating Continuously
● Now you're set up
● Commit a change to your repository
Integrating Continuously
● Now you're set up
● Commit a change to your repository
● And wait
Integrating Continuously
● Now you're set up
● Commit a change to your repository
● And wait
● ...
Build Results
Build Results
Build Results
Build Results
Build Results
Build Results
Badges
Badges
Badges
Badges
More Complex Stuff
● That's all very easy
More Complex Stuff
● That's all very easy
● Not all code is that simple
More Complex Stuff
● That's all very easy
● Not all code is that simple
● Can we do more?
More Complex Stuff
● That's all very easy
● Not all code is that simple
● Can we do more?
● Rhetorical question
Example: Adding Database
● A database is a common requirement
Example: Adding Database
● A database is a common requirement
● Include schema in repo
Example: Adding Database
● A database is a common requirement
● Include schema in repo
● Include data in repo
Example: Adding Database
● A database is a common requirement
● Include schema in repo
● Include data in repo
● Load database before testing
Example: Adding Database
● A database is a common requirement
● Include schema in repo
● Include data in repo
● Load database before testing
● “before_script” (in .travis.yml)
Example: Adding Database
before_script:
- mysql -e 'create database my_db;'
- mysql -D my_db < db/load_db.sql
Example: Connecting to Database
● Travis­CI sets up a database user
Example: Connecting to Database
● Travis­CI sets up a database user
● Called “travis”
Example: Connecting to Database
● Travis­CI sets up a database user
● Called “travis”
● No password
Example: Connecting to Database
● Travis­CI sets up a database user
● Called “travis”
● No password
● Use env variables
Example: Connecting to Database
● Travis­CI sets up a database user
● Called “travis”
● No password
● Use env variables
● “env” (in .travis.yml)
Example: Connecting to Database
env: MYAPP_DB_SERVER=localhost
MYAPP_DB_NAME=my_db
MYAPP_DB_USER=travis
MYAPP_DB_PASS=''
Example: Test Coverage
● Automatically run test coverage
Example: Test Coverage
● Automatically run test coverage
● http://coveralls.io/
Example: Test Coverage
● Automatically run test coverage
● http://coveralls.io/
● Add to .travis.yml
.travis.yml
install:
  cpanm ­­quiet –notest    
        Devel::Cover::Report::Coveralls
script:
  ­ PERL5OPT=­Mdevel::Cover=­coverage,statement, 
    branch,condition,path,subroutine prove ­lrsv t
  ­ cover
after_success:
  ­ cover ­report coveralls
See also
● http://mgnm.at/travis520
Example: Test Coverage
Example: Test Coverage
Example: Test Coverage
More and More
● Many more things are possible
More and More
● Many more things are possible
● Barely scratching the surface
More and More
● Many more things are possible
● Barely scratching the surface
● See http://docs.travis­ci.com/
More and More
● Many more things are possible
● Barely scratching the surface
● See http://docs.travis­ci.com/
● If you do something cool, please blog it
Summary
Summary
● Github is awesome
Summary
● Github is awesome
● Unit tests are awesome
Summary
● Github is awesome
● Unit tests are awesome
● Continuous integration is awesome
Summary
● Github is awesome
● Unit tests are awesome
● Continuous integration is awesome
● Travis­CI is awesome
Summarised Summary
Summarised Summary
● APIs are awesome
Summarised Summary
● APIs are awesome
● Other people are awesome
Questions?
Thank You
Dave Cross
dave@perlhacks.com
@davorg

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

TuleapCon 2019. Tuleap explained by the users
TuleapCon 2019. Tuleap explained by the usersTuleapCon 2019. Tuleap explained by the users
TuleapCon 2019. Tuleap explained by the users
 
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHubIncrease the Velocity of Your Software Releases Using GitHub and DeployHub
Increase the Velocity of Your Software Releases Using GitHub and DeployHub
 
Paving roads
Paving roadsPaving roads
Paving roads
 
Git Branching for Agile Teams
Git Branching for Agile TeamsGit Branching for Agile Teams
Git Branching for Agile Teams
 
GitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorialGitLab 8.5 Highlights and Step-by-step tutorial
GitLab 8.5 Highlights and Step-by-step tutorial
 
GitLab webcast - Release 8.4
GitLab webcast - Release 8.4GitLab webcast - Release 8.4
GitLab webcast - Release 8.4
 
Managing releases effectively through git
Managing releases effectively through gitManaging releases effectively through git
Managing releases effectively through git
 
Zero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review UpgradeZero-Downtime Gerrit Code Review Upgrade
Zero-Downtime Gerrit Code Review Upgrade
 
Bringing Pull Request to Gerrit
Bringing Pull Request to GerritBringing Pull Request to Gerrit
Bringing Pull Request to Gerrit
 
Is TDD dead or alive?
Is TDD dead or alive?Is TDD dead or alive?
Is TDD dead or alive?
 
Git Tutorial | Git Basics - Branching, Merging, Rebasing | Learn Git | DevOps...
Git Tutorial | Git Basics - Branching, Merging, Rebasing | Learn Git | DevOps...Git Tutorial | Git Basics - Branching, Merging, Rebasing | Learn Git | DevOps...
Git Tutorial | Git Basics - Branching, Merging, Rebasing | Learn Git | DevOps...
 
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
TDC 2016 SP - Continuous Delivery para aplicações Java com ferramentas open-s...
 
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecerTDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
TDC 2016 SP - 5 libs de teste JavaScript que você deveria conhecer
 
Continuous Delivery for Mobile platforms (iOS and a bit of Android)
Continuous Delivery for Mobile platforms (iOS and a bit of Android)Continuous Delivery for Mobile platforms (iOS and a bit of Android)
Continuous Delivery for Mobile platforms (iOS and a bit of Android)
 
Comparing Agile QA Approaches to End-to-End Testing
Comparing Agile QA Approaches to End-to-End TestingComparing Agile QA Approaches to End-to-End Testing
Comparing Agile QA Approaches to End-to-End Testing
 
GitLab 8.6 - Release Webcast
GitLab 8.6 - Release Webcast GitLab 8.6 - Release Webcast
GitLab 8.6 - Release Webcast
 
Collaborative Package Development in R
Collaborative Package Development in RCollaborative Package Development in R
Collaborative Package Development in R
 
True Git
True Git True Git
True Git
 
Git Branching for Agile Teams
Git Branching for Agile Teams Git Branching for Agile Teams
Git Branching for Agile Teams
 
TDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e PromisesTDC 2016 Floripa - Testando APIs REST com Supertest e Promises
TDC 2016 Floripa - Testando APIs REST com Supertest e Promises
 

Similar a Github, Travis-CI and Perl

Python to go
Python to goPython to go
Python to go
Weng Wei
 
I Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
I Love APIs 2015 API Lab Design-first API Development Using Node and SwaggerI Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
I Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
Apigee | Google Cloud
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
Simplilearn
 

Similar a Github, Travis-CI and Perl (20)

Webinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLabWebinar - Continuous Integration with GitLab
Webinar - Continuous Integration with GitLab
 
Python to go
Python to goPython to go
Python to go
 
Code review and automated testing for Puppet code
Code review and automated testing for Puppet codeCode review and automated testing for Puppet code
Code review and automated testing for Puppet code
 
Introducing GitLab
Introducing GitLabIntroducing GitLab
Introducing GitLab
 
Integrating continuous integration and deployment with GitHub’s API
Integrating continuous integration and deployment with GitHub’s APIIntegrating continuous integration and deployment with GitHub’s API
Integrating continuous integration and deployment with GitHub’s API
 
Lightweight continuous delivery for small schools
Lightweight continuous delivery for small schoolsLightweight continuous delivery for small schools
Lightweight continuous delivery for small schools
 
Turbo boosting your python development
Turbo boosting your python developmentTurbo boosting your python development
Turbo boosting your python development
 
Github Copilot vs Amazon CodeWhisperer for Java developers at JCON 2023
Github Copilot vs Amazon CodeWhisperer for Java developers at JCON 2023Github Copilot vs Amazon CodeWhisperer for Java developers at JCON 2023
Github Copilot vs Amazon CodeWhisperer for Java developers at JCON 2023
 
Git tech
Git techGit tech
Git tech
 
Continuous Integration Best Practices (DEV319-R1) - AWS re:Invent 2018
Continuous Integration Best Practices (DEV319-R1) - AWS re:Invent 2018Continuous Integration Best Practices (DEV319-R1) - AWS re:Invent 2018
Continuous Integration Best Practices (DEV319-R1) - AWS re:Invent 2018
 
Ci of js and apex using jasmine, phantom js and drone io df14
Ci of js and apex using jasmine, phantom js and drone io   df14Ci of js and apex using jasmine, phantom js and drone io   df14
Ci of js and apex using jasmine, phantom js and drone io df14
 
TDD with Python and App Engine
TDD with Python and App EngineTDD with Python and App Engine
TDD with Python and App Engine
 
Building the Pipeline of My Dreams
Building the Pipeline of My DreamsBuilding the Pipeline of My Dreams
Building the Pipeline of My Dreams
 
I Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
I Love APIs 2015 API Lab Design-first API Development Using Node and SwaggerI Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
I Love APIs 2015 API Lab Design-first API Development Using Node and Swagger
 
Releaseflow: a healthy build and deploy process
Releaseflow: a healthy build and deploy processReleaseflow: a healthy build and deploy process
Releaseflow: a healthy build and deploy process
 
TRAVIS CI-KNOLX
TRAVIS CI-KNOLXTRAVIS CI-KNOLX
TRAVIS CI-KNOLX
 
What's a Pull Request (Contributing to Open Source) - Brad Wood
What's a Pull Request (Contributing to Open Source) - Brad WoodWhat's a Pull Request (Contributing to Open Source) - Brad Wood
What's a Pull Request (Contributing to Open Source) - Brad Wood
 
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
DevOps Tutorial For Beginners | DevOps Tutorial | DevOps Tools | DevOps Train...
 
Pure APIs: Development workflows for successful API integrations
Pure APIs: Development workflows for successful API integrationsPure APIs: Development workflows for successful API integrations
Pure APIs: Development workflows for successful API integrations
 
Continuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applicationsContinuous integration and delivery for java based web applications
Continuous integration and delivery for java based web applications
 

Más de Dave Cross

Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and MooseObject-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
Dave Cross
 
Database Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::ClassDatabase Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::Class
Dave Cross
 

Más de Dave Cross (20)

Measuring the Quality of Your Perl Code
Measuring the Quality of Your Perl CodeMeasuring the Quality of Your Perl Code
Measuring the Quality of Your Perl Code
 
Apollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter BotApollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter Bot
 
Monoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver BulletsMonoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver Bullets
 
The Professional Programmer
The Professional ProgrammerThe Professional Programmer
The Professional Programmer
 
I'm A Republic (Honest!)
I'm A Republic (Honest!)I'm A Republic (Honest!)
I'm A Republic (Honest!)
 
Web Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your GooglejuiceWeb Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your Googlejuice
 
Modern Perl Web Development with Dancer
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
 
Freeing Tower Bridge
Freeing Tower BridgeFreeing Tower Bridge
Freeing Tower Bridge
 
Modern Perl Catch-Up
Modern Perl Catch-UpModern Perl Catch-Up
Modern Perl Catch-Up
 
Error(s) Free Programming
Error(s) Free ProgrammingError(s) Free Programming
Error(s) Free Programming
 
Medium Perl
Medium PerlMedium Perl
Medium Perl
 
Modern Web Development with Perl
Modern Web Development with PerlModern Web Development with Perl
Modern Web Development with Perl
 
Improving Dev Assistant
Improving Dev AssistantImproving Dev Assistant
Improving Dev Assistant
 
Conference Driven Publishing
Conference Driven PublishingConference Driven Publishing
Conference Driven Publishing
 
Conference Driven Publishing
Conference Driven PublishingConference Driven Publishing
Conference Driven Publishing
 
TwittElection
TwittElectionTwittElection
TwittElection
 
Perl in the Internet of Things
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of Things
 
Return to the Kingdom of the Blind
Return to the Kingdom of the BlindReturn to the Kingdom of the Blind
Return to the Kingdom of the Blind
 
Object-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and MooseObject-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
 
Database Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::ClassDatabase Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::Class
 

Último

%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
masabamasaba
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
chiefasafspells
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 

Último (20)

WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open SourceWSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
WSO2CON 2024 - Freedom First—Unleashing Developer Potential with Open Source
 
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
Love witchcraft +27768521739 Binding love spell in Sandy Springs, GA |psychic...
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
 
WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto%in Soweto+277-882-255-28 abortion pills for sale in soweto
%in Soweto+277-882-255-28 abortion pills for sale in soweto
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the SituationWhat Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
 
WSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - KeynoteWSO2Con204 - Hard Rock Presentation - Keynote
WSO2Con204 - Hard Rock Presentation - Keynote
 
WSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security ProgramWSO2CON 2024 - How to Run a Security Program
WSO2CON 2024 - How to Run a Security Program
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 

Github, Travis-CI and Perl