diff --git a/.travis.yml b/.travis.yml index 5d5c5e8e..e702877d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,9 +5,11 @@ before_install: - rvm install 2.4.0 install: - gem install awesome_bot +before_script: + - cd build script: - - awesome_bot README.md --allow-ssl --allow 403,302 + - ./main.sh after_success: - - cd build - - sh build.sh - - sh deploy.sh + - ./build.sh + - ./deploy.sh + diff --git a/build/deploy.sh b/build/deploy.sh old mode 100644 new mode 100755 diff --git a/build/main.sh b/build/main.sh new file mode 100755 index 00000000..4e4dc52e --- /dev/null +++ b/build/main.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +echo "running format validation..." +./validate.rb ../README.md + +if ["$?" == 0]; then + echo "format validation PASSED" +else + echo "format validation FAILED" +fi + +if [ "$TRAVIS_BRANCH" == "master" ]; then + echo "running link validation..." + awesome_bot README.md --allow-ssl --allow 403,302 +fi diff --git a/build/validate.rb b/build/validate.rb new file mode 100755 index 00000000..eecfa514 --- /dev/null +++ b/build/validate.rb @@ -0,0 +1,52 @@ +#!/usr/bin/env ruby +auth_keys = ['apiKey', 'OAuth', 'X-Mashape-Key', 'No'] +https_keys = ['Yes', 'No'] + +args = ARGV +filename = args[0] +fail_flag = false + +File.foreach(filename).with_index do |line, line_num| + line_num += 1 + if line.start_with?('|') + # Skip table schema lines + if line.eql? "|---|---|---|---|---|\n" + next + end + values = line.split("|") + + # Check Description to make sure first character is capitalized + desc_val = values[2].lstrip.chop + if !/[[:upper:]]/.match(desc_val[0]) + puts "(#{line_num}) Invalid Description (first char not uppercase): #{desc_val}" + fail_flag = true + end + + # Check Auth values to conform to valid options only + auth_val = values[3].lstrip.chop.tr('``', '') + if !auth_keys.include?(auth_val) + puts "(#{line_num}) Invalid Auth (not a valid option): #{auth_val}" + fail_flag = true + end + + # Check HTTPS Support values to be either "Yes" or "No" + https_val = values[4].lstrip.chop + if !https_keys.include?(https_val) + puts "(#{line_num}) Invalid HTTPS: (must use \"Yes\" or \"No\"): #{https_val}" + fail_flag = true + end + + # Check Link to ensure url is wrapped in "[Go!]" view + link_val = values[5].lstrip.chop + if !link_val.start_with?("[Go!](") || !link_val.end_with?(')') + puts "(#{line_num}) Invalid Link: (format should be \"[Go!]()\"): #{link_val}" + fail_flag = true + end + end +end + +if fail_flag + exit(1) +else + exit(0) +end