Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Current »

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 and ASSERTTHAT_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
at_access_key = 'YOUR_ASSERTTHAT_ACCESS_KEY'
at_secret_key = 'YOUR_ASSERTTHAT_SECRET_KEY'
at_project_id = 'YOUR_ASSERTTHAT_PROJECT_ID'
at_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'{at_api_endpoint}/project/{at_project_id}/client/features',
    headers={'Authorization': f'Basic {at_access_key}:{at_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

  • No labels