Skip to content

Commit

Permalink
9273-bugs-on-the-registry-due-the-home-page-project
Browse files Browse the repository at this point in the history
  • Loading branch information
actions-user committed Jun 14, 2024
1 parent 2f2e78e commit 182cb2d
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 27 deletions.
12 changes: 6 additions & 6 deletions .github/workflows/prod-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests beautifulsoup4
pip install requests beautifulsoup4 urllib3
- name: Checkout repository
uses: actions/checkout@v3
Expand Down Expand Up @@ -54,7 +54,7 @@ jobs:

- name: Validate QA Deployment
run: |
python wordpress-prod-release-validation.py QA
python wordpress-prod-release-validation.py QA ${{ github.event.inputs.version }}
upload_prod_wordpress_to_fallback_s3:

Expand All @@ -71,7 +71,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests beautifulsoup4
pip install requests beautifulsoup4 urllib3
- name: Checkout repository
uses: actions/checkout@v3
Expand Down Expand Up @@ -100,7 +100,7 @@ jobs:

- name: Validate Fallback Deployment
run: |
python wordpress-prod-release-validation.py FALLBACK
python wordpress-prod-release-validation.py FALLBACK ${{ github.event.inputs.version }}
upload_prod_wordpress_to_prod_s3:
Expand All @@ -117,7 +117,7 @@ jobs:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install requests beautifulsoup4
pip install requests beautifulsoup4 urllib3
- name: Checkout repository
uses: actions/checkout@v3
Expand Down Expand Up @@ -152,4 +152,4 @@ jobs:

- name: Validate Production Deployment
run: |
python wordpress-prod-release-validation.py PROD
python wordpress-prod-release-validation.py PROD ${{ github.event.inputs.version }}
73 changes: 52 additions & 21 deletions wordpress-prod-release-validation.py
Original file line number Diff line number Diff line change
@@ -1,50 +1,80 @@
import requests
from bs4 import BeautifulSoup
from bs4 import BeautifulSoup, Comment
import sys
import logging
from urllib.parse import urljoin
from github_writer import GitHubWriter
from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

def validate_assets(url, github_writer, env):
# Configure logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')

def create_session_with_retries():
session = requests.Session()
retries = Retry(total=3, backoff_factor=1, status_forcelist=[500, 502, 503, 504])
session.mount('http://', HTTPAdapter(max_retries=retries))
session.mount('https://', HTTPAdapter(max_retries=retries))
return session

def fetch_url(session, url):
try:
response = requests.get(url)
response = session.get(url, timeout=5)
response.raise_for_status()
return response
except requests.exceptions.RequestException as e:
github_writer.write_summary_and_fail(f"Failed to fetch {url}: {e}", env)
logging.error(f"Failed to fetch {url}: {e}")
return None

def validate_version(soup, version):
comments = soup.find_all(string=lambda text: isinstance(text, Comment))
version_comment = f"Version: {version}"
for comment in comments:
if version_comment in comment:
return True
return False

def validate_assets(url, version, github_writer, env):
session = create_session_with_retries()
response = fetch_url(session, url)

if not response:
github_writer.write_summary_and_fail(f"Failed to fetch {url}.", env)
return False

soup = BeautifulSoup(response.content, 'html.parser')

if not validate_version(soup, version):
github_writer.write_summary_and_fail(f"Version {version} not found in {url}.", env)
return False

# Collect all asset URLs
assets = []

# Find image sources
assets.extend([img['src'] for img in soup.find_all('img') if 'src' in img.attrs])

# Find CSS references
assets.extend([link['href'] for link in soup.find_all('link', rel='stylesheet') if 'href' in link.attrs])

# Find JavaScript sources
assets.extend([script['src'] for script in soup.find_all('script') if 'src' in script.attrs])

all_assets_valid = True
failed_assets = []

for asset in assets:
asset_url = urljoin(url, asset)
try:
asset_response = requests.get(asset_url)
asset_response.raise_for_status()
except requests.exceptions.RequestException as e:
github_writer.write_summary(f"Failed to fetch asset {asset_url}: {e}", env)
if not fetch_url(session, asset_url):
failed_assets.append(asset_url)
all_assets_valid = False
raise

if failed_assets:
for failed_asset in failed_assets:
github_writer.write_summary(f"Failed to fetch asset {failed_asset}.", env)
return all_assets_valid

def main():
if len(sys.argv) != 2:
print("Usage: python validate_assets.py <environment>", file=sys.stderr)
if len(sys.argv) != 3:
print("Usage: python validate_assets.py <environment> <version>", file=sys.stderr)
sys.exit(1)

env = sys.argv[1]
version = sys.argv[2]
urls = {
"QA": "https://d3055hwma3riwo.cloudfront.net/index.html",
"FALLBACK": "https://d1kh89kum7j2ji.cloudfront.net/index.html",
Expand All @@ -57,10 +87,11 @@ def main():

url = urls[env]
github_writer = GitHubWriter()
if validate_assets(url, github_writer, env):
github_writer.write_summary(f"All assets are correctly loaded for {env} environment.")

if validate_assets(url, version, github_writer, env):
github_writer.write_summary(f"All assets are correctly loaded and version {version} is present. Please check the [env deployed homepage]({urls[env]}) for any issues.")
else:
github_writer.write_summary(f"Some assets failed to load for {env} environment.", env)
github_writer.write_summary(f"Some assets failed to load or version {version} is missing for {env} environment.", env)
sys.exit(1)

if __name__ == "__main__":
Expand Down

0 comments on commit 182cb2d

Please sign in to comment.