Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - 0x4bs3nt/bettercd: Graphical Node-Based CI/CD Pipeline Builder · GitHub
Skip to content

BetterCD

GitHub License


Graphical node-based CI/CD Pipeline Builder. Create and run your CI/CD pipelines by adding premade "nodes" or running custom functions. Avoid the hassle of self-hosting runners, maintaining environments, dealing with yaml config files and other common DevOps headaches.

Caution

This project is under heavy development! It is NOT recommended to run this software in production environments yet!

Contributing

Contributions are always welcome!

See CONTRIBUTING.md for ways to get started. Please adhere to this project's code of conduct.

Running Locally / Self-Hosting

The project is separated into a frontend and backend directories. The frontend directory is a React application that uses Vite for development and build. The backend directory is a Django application that uses Django REST Framework for the API.

The project also requires the use of Cloudflare R2 for storage, Google Cloud for pipeline execution and a GitHub application for repository access.

Backend

Prerequisites

  • Python 3.8 or higher
  • uv

Environment Setup

The backend uses uv and a .env file to manage environment variables and packages.

  1. Change to the backend directory:

    cd backend
  2. Create a virtual environment and install the required packages:

    uv sync

    This will create a virtual environment in the .venv directory and install the required packages in it. You can manually activate the virtual environment by running:

    source .venv/bin/activate
  3. Setting up the environment variables:

    Copy the project/.env.example file to project/.env and update the values as needed. The project uses Cloudflare R2 for storage, GitHub for repository access, PostgreSQL for the database, and Celery for asynchronous tasks.

    1. Generate a Django secret key using Djecrety and update the DJANGO_SECRET_KEY variable in the .env file.

    2. Set the DEBUG variable to True for development and False for production.

    3. Set the ALLOWED_HOSTS variable to localhost for development and your-domain.com for production.

    4. Set up the CORS_ALLOWED_ORIGINS variable to allow requests from the frontend application. For development, set it to http://localhost:3000 and for production, set it to your frontend domain.

    5. Set the database variables to the appropriate values for your created PostgreSQL database. The default values are:

    6. Cloudflare R2: Create a Cloudflare account and set up a R2 Object Storage bucket. Get the Access and Secret keys, bucket name and endpoint URL. With these values, update the variables in the .env file:

    7. Google Cloud: Create a Google Cloud account. Create a new project and set the variable GCLOUD_PROJECT_ID to that project ID.

      Create a new service account with permissions for Cloud Run, Artifact Registry and Pub/Sub. Download the service account key in JSON format, rename it to service-account.json and place it at the root of the backend directory.

      Choose a region you want to use and set the GCLUD_REGION variable to that.

      Head to the artifact registry and create a new repository called script-repo. Build and upload the Dockerfile from the base-image directory to the repository. Make sure to set the image name to base-image and the tag to latest.

      Create a new Pub/Sub topic where all the logs will be sent to. Head to the logging section and create a new sink in the Log Router section. Choose the Pub/Sub topic you created and set the sink name to bettercd-logs. Set the inclusion filter to:

      resource.type="cloud_run_job"
      resource.labels.job_name=~"pipeline-job-*"
      severity="DEFAULT"

      Create a new subscription for the topic and set the delivery type to Pull, ack deadline to 10 seconds, retention to 2 hours, disable exactly once delivery and set the expiration to 31 days.

    8. GitHub: Head over to the Developer settings of your GitHub account and create a new GitHub app. with repository permissions. From there, copy the App ID and Name and set those environment variables in the .env file.

      Set the GITHUB_CALLBACK_URL variable to the URL of your frontend + /dashboard/integrations. For example: http://localhost:3000/dashboard/integrations.

      Finally, generate a private key for the app and place it wherever you want in the backend directory and set the GITHUB_PRIVATE_KEY_PATH variable to the path of the key. Make sure the key is named github-private-key.pem.

    9. Celery: The project uses Celery for asynchronous tasks. Make sure to set the CELERY_BROKER_URL variable to the URL of your Redis server.

  4. Run the database migrations:

    All the migration files are prepared and ready to be used. Run the following command to apply the migrations to the database:

    python manage.py migrate
  5. Create a superuser account:

    Create a superuser account to access the Django admin panel. The account can also be used to log in to the frontend application. To create a superuser account, run the following command and follow the prompts:

    python manage.py createsuperuser
  6. Run the backend application:

    python manage.py runserver

Celery

Running the Celery worker locally is needed for real-time log updates and pipeline runs. To run the Celery worker, run the following command:

celery -A project worker --loglevel=INFO

Caveat: Sometimes the worker kills itself on MacOS. To fix this, run the worker with the --pool=solo option:

celery -A project worker --loglevel=INFO --pool=solo

Frontend

  1. Change to the frontend directory:

    cd frontend
  2. Install the required packages:

    bun install
  3. Set up the environment variables:

    Create a .env file in the frontend directory and set the following:

    VITE_BE_URL=http://localhost:8000

    This will set the backend URL where the frontend will send requests to.

  4. Run the frontend application:

    bun run dev

Support & Feedback

For support or feedback email 72min@proton.me.

For issues, feature requests, bugs, etc.. please open an issue here on GitHub.

About

Graphical Node-Based CI/CD Pipeline Builder

Resources

Code of conduct

Contributing

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages