Browse Source

web: use version_id to retrieve version info instead of remote and commit ref

Shiv Tyagi 3 months ago
parent
commit
ed62c4f7e2
2 changed files with 34 additions and 39 deletions
  1. 30 28
      web/app.py
  2. 4 11
      web/static/js/add_build.js

+ 30 - 28
web/app.py

@@ -1,7 +1,6 @@
 #!/usr/bin/env python3
 
 import os
-import base64
 from flask import Flask, render_template, request, send_from_directory, jsonify, redirect
 from threading import Thread
 import sys
@@ -134,21 +133,18 @@ def refresh_remotes():
 def generate():
     try:
         version = request.form['version']
-        remote_name, commit_ref = version.split('/', 1)
-        remote_info = versions_fetcher.get_remote_info(remote_name)
-
-        if remote_info is None:
-            raise Exception(f"Remote {remote_name} is not whitelisted.")
-
         vehicle = request.form['vehicle']
+
         version_info = versions_fetcher.get_version_info(
             vehicle_id=vehicle,
-            remote=remote_name,
-            commit_ref=commit_ref
+            version_id=version
         )
 
         if version_info is None:
-            raise Exception("Commit reference invalid or not listed to be built for given vehicle for remote")
+            raise Exception("Version invalid or not listed to be built for given vehicle")
+
+        remote_name = version_info.remote_info.name
+        commit_ref = version_info.commit_ref
 
         board = request.form['board']
         boards_at_commit = ap_src_metadata_fetcher.get_boards(
@@ -177,7 +173,7 @@ def generate():
 
         build_info = build_manager.BuildInfo(
             vehicle_id=vehicle,
-            remote_info=remote_info,
+            remote_info=version_info.remote_info,
             git_hash=git_hash,
             board=board,
             selected_features=chosen_defines
@@ -231,14 +227,20 @@ def download_file(build_id, name):
     app.logger.info('Downloading %s/%s' % (path, name))
     return send_from_directory(path, name, as_attachment=False)
 
-@app.route("/boards_and_features/<string:vehicle_id>/<string:remote_name>/<string:commit_reference>", methods=['GET'])
-def boards_and_features(vehicle_id, remote_name, commit_reference):
-    commit_reference = base64.urlsafe_b64decode(commit_reference).decode()
+@app.route("/boards_and_features/<string:vehicle_id>/<string:version_id>", methods=['GET'])
+def boards_and_features(vehicle_id, version_id):
+    version_info = versions_fetcher.get_version_info(
+        vehicle_id=vehicle_id,
+        version_id=version_id
+    )
 
-    if not versions_fetcher.is_version_listed(vehicle_id=vehicle_id, remote=remote_name, commit_ref=commit_reference):
-        return "Bad request. Commit reference not allowed to build for the vehicle.", 400
+    if version_info is None:
+        return "Bad request. Version not allowed to build for the vehicle.", 400
 
-    app.logger.info('Board list and build options requested for %s %s %s' % (vehicle_id, remote_name, commit_reference))
+    remote_name = version_info.remote_info.name
+    commit_reference = version_info.commit_ref
+
+    app.logger.info('Board list and build options requested for %s %s' % (vehicle_id, version_id))
     # getting board list for the branch
     with repo.get_checkout_lock():
         boards = ap_src_metadata_fetcher.get_boards(
@@ -284,13 +286,12 @@ def get_versions(vehicle_id):
     versions = list()
     for version_info in versions_fetcher.get_versions_for_vehicle(vehicle_id=vehicle_id):
         if version_info.release_type == "latest":
-            title = f"Latest ({version_info.remote})"
+            title = f"Latest ({version_info.remote_info.name})"
         else:
-            title = f"{version_info.release_type} {version_info.version_number} ({version_info.remote})"
-        id = f"{version_info.remote}/{version_info.commit_ref}"
+            title = f"{version_info.release_type} {version_info.version_number} ({version_info.remote_info.name})"
         versions.append({
-            "title" :   title,
-            "id"    :   id,
+            "title": title,
+            "id": version_info.version_id,
         })
 
     return jsonify(sorted(versions, key=lambda x: x['title']))
@@ -303,21 +304,22 @@ def get_vehicles():
     ]
     return jsonify(sorted(vehicles, key=lambda x: x['id']))
 
-@app.route("/get_defaults/<string:vehicle_id>/<string:remote_name>/<string:commit_reference>/<string:board_name>", methods = ['GET'])
-def get_deafults(vehicle_id, remote_name, commit_reference, board_name):
+@app.route("/get_defaults/<string:vehicle_id>/<string:version_id>/<string:board_name>", methods = ['GET'])
+def get_deafults(vehicle_id, version_id, board_name):
     vehicle = vehicles_manager.get_vehicle_by_id(vehicle_id)
     if vehicle is None:
         return "Invalid vehicle ID", 400
-    
     # Heli is built on copter boards with -heli suffix
     if vehicle_id == "heli":
         board_name += "-heli"
 
-    commit_reference = base64.urlsafe_b64decode(commit_reference).decode()
-    version_info = versions_fetcher.get_version_info(vehicle_id=vehicle_id, remote=remote_name, commit_ref=commit_reference)
+    version_info = versions_fetcher.get_version_info(
+        vehicle_id=vehicle_id,
+        version_id=version_id
+    )
 
     if version_info is None:
-        return "Bad request. Commit reference %s is not allowed for builds for the %s for %s remote." % (commit_reference, vehicle.name, remote_name), 400
+        return "Bad request. Version is not allowed for builds for the %s." % vehicle.name, 400
 
     artifacts_dir = version_info.ap_build_artifacts_url
 

+ 4 - 11
web/static/js/add_build.js

@@ -375,11 +375,8 @@ function onVersionChange(new_version) {
     let elements_to_block = ['vehicle', 'version', 'board', 'submit', 'reset_def', 'exp_col_button'];
     enableDisableElementsById(elements_to_block, false);
     let vehicle_id = document.getElementById("vehicle").value;
-    let arr = new_version.split("/");
-    let remote = arr.shift();
-    let commit_ref = arr.join("/");
-    commit_ref = btoa(commit_ref).replace(/\//g, "_").replace(/\+/g, "-"); // url-safe base64 encoding
-    let request_url = `/boards_and_features/${vehicle_id}/${remote}/${commit_ref}`;
+    let version_id = new_version;
+    let request_url = `/boards_and_features/${vehicle_id}/${version_id}`;
 
     // create a temporary container to set spinner inside it
     let temp_container = document.createElement('div');
@@ -431,15 +428,11 @@ function fetchAndUpdateDefaults() {
     elements_to_block = ['reset_def'];
     document.getElementById('reset_def').innerHTML = '<span class="spinner-border spinner-border-sm me-2" role="status" aria-hidden="true"></span>Fetching defaults';
     enableDisableElementsById(elements_to_block, false);
-    let version = document.getElementById('version').value;
+    let version_id = document.getElementById('version').value;
     let vehicle = document.getElementById('vehicle').value;
     let board = document.getElementById('board').value;
 
-    let arr = version.split("/");
-    let remote = arr.shift();
-    let commit_ref = arr.join("/");
-    commit_ref = btoa(commit_ref).replace(/\//g, "_").replace(/\+/g, "-"); // url-safe base64 encoding
-    let request_url = '/get_defaults/'+vehicle+'/'+remote+'/'+commit_ref+'/'+board;
+    let request_url = '/get_defaults/'+vehicle+'/'+version_id+'/'+board;
     sendAjaxRequestForJsonResponse(request_url)
         .then((json_response) => {
             Features.updateDefaults(json_response);