Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create function to generate Github CI/CD workflow #391

Closed
Dr0p42 opened this issue May 7, 2023 · 0 comments
Closed

Create function to generate Github CI/CD workflow #391

Dr0p42 opened this issue May 7, 2023 · 0 comments
Labels
enhancement New feature or request

Comments

@Dr0p42
Copy link
Collaborator

Dr0p42 commented May 7, 2023

Implement Github CI/CD Workflow for Naas Service

This issue aims to implement a Github CI/CD workflow generator for a Naas service. The workflow will be triggered when a new release/tag is created and managed by the semantic-release process.

Specifications

  • Implement the function naas.service.generate_ci(service_name, registry_name, dockerfile_path, docker_context, ci_type) in Python.
  • The CI/CD workflow should:
    1. Checkout the code
    2. Use a CI/CD variable/secret to authenticate on auth.naas.ai
    3. Ask for temporary credentials on service.naas.ai/registry/registry_name/credentials to be able to login and push the built container
    4. Docker login against the container registry
    5. Get the url of the service by calling service.naas.ai/registry/registry_name
    6. Build the container
    7. Tag the container
    8. Push the container
    9. Update the service version by calling PUT service.naas.ai/service/service_name

GPT4 - Helpers

Creating a Github CI/CD workflow that will be triggered on new tags

To create a Github CI/CD workflow that is triggered on new tags, include the following in your workflow YAML file:

on:
  push:
    tags:
      - '*'

This will ensure the workflow is only triggered on new tags, and not on every push to the repository.

Using Jinja2 with Python to template a file

Jinja2 is a popular templating engine for Python. To use Jinja2 to template a file, follow these steps:

  1. Install Jinja2: pip install jinja2
  2. Create a template file (e.g., template.j2) with placeholders for variable values, using the double curly brace syntax: {{ variable_name }}
  3. In your Python script, import Jinja2 and load the template file:
from jinja2 import Environment, FileSystemLoader

env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('template.j2')
  1. Render the template with the desired variable values:
rendered_template = template.render(variable_name=value)
  1. Save the rendered template to a new file:
with open('output_file.yaml', 'w') as output_file:
    output_file.write(rendered_template)

Replace output_file.yaml with the desired output file name, and ensure the variable names in the template match the variables passed to the render() function.

Estimate: 1
Priority: Medium

@Dr0p42 Dr0p42 added the enhancement New feature or request label May 7, 2023
@Dr0p42 Dr0p42 moved this from 📋 Backlog to 🔖 Ready in ⚡️ Product Roadmap May 10, 2023
@Dr0p42 Dr0p42 closed this as completed May 25, 2023
@github-project-automation github-project-automation bot moved this from 🔖 Ready to ✅ Done in ⚡️ Product Roadmap May 25, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Archived in project
Development

No branches or pull requests

1 participant