This is a step-by-step guide for setting up a GitHub Actions workflow to synchronize modified .feature
files from AssertThat to a GitHub repository.
Prerequisites:
Access to GitHub and a GitHub repository where you want to store the feature files.
Access to your AssertThat instance with the necessary permissions.
Your AssertThat project's
ASSERTTHAT_ACCESS_KEY
andASSERTTHAT_SECRET_KEY
, which can be obtained from the AssertThat project configuration.Your AssertThat project's
PROJECT_ID
, which you can obtain from AssertThat.
Step 1: Set Up a GitHub Repository
If you don't have an existing GitHub repository, create one where you want to store your feature files.
Step 2: Create a Python Script
2.1. Create a Python script (e.g., sync_features.py
) with the following content:
import requests import os import zipfile from github import Github # AssertThat credentials attm_access_key = 'YOUR_ASSERTTHAT_ACCESS_KEY' attm_secret_key = 'YOUR_ASSERTTHAT_SECRET_KEY' attm_project_id = 'YOUR_ASSERTTHAT_PROJECT_ID' attm_api_endpoint = 'https://YOUR_JIRA_HOST/rest/assertthat/latest' # GitHub credentials github_token = 'YOUR_GITHUB_TOKEN' github_repo = 'YOUR_GITHUB_USERNAME/YOUR_GITHUB_REPO' # Directory to store feature files feature_directory = 'feature_files' # Create a GitHub repository object g = Github(github_token) repo = g.get_repo(github_repo) # Create a directory to store feature files if it doesn't exist if not os.path.exists(feature_directory): os.makedirs(feature_directory) # Fetch feature files from AssertThat response = requests.get( f'{attm_api_endpoint}/project/{attm_project_id}/client/features', headers={'Authorization': f'Basic {attm_access_key}:{attm_secret_key}'} ) if response.status_code == 200: # Save the feature files ZIP to the local directory zip_file_path = os.path.join(feature_directory, 'features.zip') with open(zip_file_path, 'wb') as f: f.write(response.content) # Extract the ZIP file with zipfile.ZipFile(zip_file_path, 'r') as zip_ref: zip_ref.extractall(feature_directory) # Commit and push each extracted .feature file for root, _, files in os.walk(feature_directory): for file in files: if file.endswith(".feature"): file_path = os.path.join(root, file) with open(file_path, 'rb') as f: content = f.read() # Specify the file path within the repository file_path_within_repo = os.path.relpath(file_path, feature_directory) repo.create_file( path=file_path_within_repo, message=f'Update feature file: {file}', content=content, branch='main' ) # Clean up (delete the local files) os.remove(zip_file_path) for root, _, files in os.walk(feature_directory): for file in files: os.remove(os.path.join(root, file)) else: print(f'Failed to fetch feature files from AssertThat. Status code: {response.status_code}')
2.2. In the script, replace the placeholders with your specific credentials and file paths:
YOUR_ASSERTTHAT_ACCESS_KEY
,YOUR_ASSERTTHAT_SECRET_KEY
: Your AssertThat access key and secret key.YOUR_ASSERTTHAT_PROJECT_ID
: The ID of your project in AssertThat.YOUR_JIRA_HOST
: The AssertThat API endpoint.YOUR_GITHUB_TOKEN
: Your GitHub personal access token.YOUR_GITHUB_USERNAME
: Your GitHub username.YOUR_GITHUB_REPO
: The name of your GitHub repository.NOTE: The example above is for Jira Data Center. In case you use cloud version the following URL should be used for downloading features:
https://bdd.assertthat.app/rest/api/1/project/YOUR_ASSERT_THAT_PROJECT_ID/features
Step 3: Set Up GitHub Secrets
In your GitHub repository, navigate to "Settings" > "Secrets" and add the following secrets:
YOUR_ASSERTTHAT_ACCESS_KEY
: Your AssertThat access key.YOUR_ASSERTTHAT_SECRET_KEY
: Your AssertThat secret key.YOUR_GITHUB_TOKEN
: Your GitHub personal access token.
Step 4: Create a GitHub Actions Workflow
4.1. In your GitHub repository, go to the "Actions" tab and click on "New workflow."
4.2. Choose "Set up a workflow yourself."
4.3. Replace the contents of the generated YAML file with the following:
name: Sync Features from AssertThat to GitHub on: schedule: - cron: '0 0 * * *' # Run the workflow daily at midnight as an example jobs: sync_features: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.x - name: Install Python dependencies run: pip install -r requirements.txt - name: Run the script run: python sync_features.py - name: Clean up local files run: | rm -rf feature_files
This GitHub Actions workflow:
Runs daily at midnight as scheduled.
Checks out your code.
Sets up Python and installs any necessary dependencies.
Runs the Python script to fetch feature files from AssertThat and push to GitHub
0 Comments