mirror of
https://github.com/DarkFlippers/unleashed-firmware.git
synced 2025-12-12 04:34:43 +04:00
Merge branch 'fz-dev' into dev
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
#include <lib/nfc/helpers/mf_classic_dict.h>
|
#include <lib/nfc/helpers/mf_classic_dict.h>
|
||||||
#include <lib/digital_signal/digital_signal.h>
|
#include <lib/digital_signal/digital_signal.h>
|
||||||
#include <lib/nfc/nfc_device.h>
|
#include <lib/nfc/nfc_device.h>
|
||||||
#include <applications/main/nfc/helpers/nfc_generators.h>
|
#include <lib/nfc/helpers/nfc_generators.h>
|
||||||
|
|
||||||
#include <lib/flipper_format/flipper_format_i.h>
|
#include <lib/flipper_format/flipper_format_i.h>
|
||||||
#include <lib/toolbox/stream/file_stream.h>
|
#include <lib/toolbox/stream/file_stream.h>
|
||||||
@@ -102,7 +102,10 @@ static bool nfc_test_digital_signal_test_encode(
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
// Read test data
|
// Read test data
|
||||||
if(!nfc_test_read_signal_from_file(file_name)) break;
|
if(!nfc_test_read_signal_from_file(file_name)) {
|
||||||
|
FURI_LOG_E(TAG, "Failed to read signal from file");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
// Encode signal
|
// Encode signal
|
||||||
FURI_CRITICAL_ENTER();
|
FURI_CRITICAL_ENTER();
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include <lib/nfc/nfc_device.h>
|
#include <lib/nfc/nfc_device.h>
|
||||||
#include <lib/nfc/helpers/mf_classic_dict.h>
|
#include <lib/nfc/helpers/mf_classic_dict.h>
|
||||||
#include <lib/nfc/parsers/nfc_supported_card.h>
|
#include <lib/nfc/parsers/nfc_supported_card.h>
|
||||||
|
#include <lib/nfc/helpers/nfc_generators.h>
|
||||||
|
|
||||||
#include "views/dict_attack.h"
|
#include "views/dict_attack.h"
|
||||||
#include "views/detect_reader.h"
|
#include "views/detect_reader.h"
|
||||||
@@ -50,9 +51,6 @@ typedef enum {
|
|||||||
NfcRpcStateEmulated,
|
NfcRpcStateEmulated,
|
||||||
} NfcRpcState;
|
} NfcRpcState;
|
||||||
|
|
||||||
// Forward declaration due to circular dependency
|
|
||||||
typedef struct NfcGenerator NfcGenerator;
|
|
||||||
|
|
||||||
struct Nfc {
|
struct Nfc {
|
||||||
NfcWorker* worker;
|
NfcWorker* worker;
|
||||||
ViewDispatcher* view_dispatcher;
|
ViewDispatcher* view_dispatcher;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "../nfc_i.h"
|
#include "../nfc_i.h"
|
||||||
#include "../helpers/nfc_generators.h"
|
#include "lib/nfc/helpers/nfc_generators.h"
|
||||||
|
|
||||||
void nfc_scene_generate_info_dialog_callback(DialogExResult result, void* context) {
|
void nfc_scene_generate_info_dialog_callback(DialogExResult result, void* context) {
|
||||||
Nfc* nfc = context;
|
Nfc* nfc = context;
|
||||||
@@ -39,7 +39,12 @@ bool nfc_scene_generate_info_on_event(void* context, SceneManagerEvent event) {
|
|||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
if(event.type == SceneManagerEventTypeCustom) {
|
||||||
if(event.event == DialogExResultRight) {
|
if(event.event == DialogExResultRight) {
|
||||||
scene_manager_next_scene(nfc->scene_manager, nfc->generator->next_scene);
|
// Switch either to NfcSceneMfClassicMenu or NfcSceneMfUltralightMenu
|
||||||
|
if(nfc->dev->dev_data.protocol == NfcDeviceProtocolMifareClassic) {
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfClassicMenu);
|
||||||
|
} else if(nfc->dev->dev_data.protocol == NfcDeviceProtocolMifareUl) {
|
||||||
|
scene_manager_next_scene(nfc->scene_manager, NfcSceneMfUltralightMenu);
|
||||||
|
}
|
||||||
consumed = true;
|
consumed = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#include "../nfc_i.h"
|
#include "../nfc_i.h"
|
||||||
#include "../helpers/nfc_generators.h"
|
#include "lib/nfc/helpers/nfc_generators.h"
|
||||||
|
|
||||||
enum SubmenuIndex {
|
enum SubmenuIndex {
|
||||||
SubmenuIndexNFCA4,
|
SubmenuIndexNFCA4,
|
||||||
|
|||||||
@@ -9,9 +9,11 @@
|
|||||||
|
|
||||||
struct WSReceiverInfo {
|
struct WSReceiverInfo {
|
||||||
View* view;
|
View* view;
|
||||||
|
FuriTimer* timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
uint32_t curr_ts;
|
||||||
FuriString* protocol_name;
|
FuriString* protocol_name;
|
||||||
WSBlockGeneric* generic;
|
WSBlockGeneric* generic;
|
||||||
} WSReceiverInfoModel;
|
} WSReceiverInfoModel;
|
||||||
@@ -28,6 +30,10 @@ void ws_view_receiver_info_update(WSReceiverInfo* ws_receiver_info, FlipperForma
|
|||||||
flipper_format_read_string(fff, "Protocol", model->protocol_name);
|
flipper_format_read_string(fff, "Protocol", model->protocol_name);
|
||||||
|
|
||||||
ws_block_generic_deserialize(model->generic, fff);
|
ws_block_generic_deserialize(model->generic, fff);
|
||||||
|
|
||||||
|
FuriHalRtcDateTime curr_dt;
|
||||||
|
furi_hal_rtc_get_datetime(&curr_dt);
|
||||||
|
model->curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
||||||
},
|
},
|
||||||
true);
|
true);
|
||||||
}
|
}
|
||||||
@@ -86,12 +92,8 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
|
|||||||
canvas_draw_str(canvas, 64, 55, buffer);
|
canvas_draw_str(canvas, 64, 55, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
if((int)model->generic->timestamp > 0) {
|
if((int)model->generic->timestamp > 0 && model->curr_ts) {
|
||||||
FuriHalRtcDateTime curr_dt;
|
int ts_diff = (int)model->curr_ts - (int)model->generic->timestamp;
|
||||||
furi_hal_rtc_get_datetime(&curr_dt);
|
|
||||||
uint32_t curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
|
||||||
|
|
||||||
int ts_diff = (int)curr_ts - (int)model->generic->timestamp;
|
|
||||||
|
|
||||||
canvas_draw_icon(canvas, 91, 46, &I_Timer_11x11);
|
canvas_draw_icon(canvas, 91, 46, &I_Timer_11x11);
|
||||||
|
|
||||||
@@ -103,7 +105,7 @@ void ws_view_receiver_info_draw(Canvas* canvas, WSReceiverInfoModel* model) {
|
|||||||
cnt_min = i;
|
cnt_min = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(curr_ts % 2 == 0) {
|
if(model->curr_ts % 2 == 0) {
|
||||||
canvas_draw_str_aligned(canvas, 105, 51, AlignLeft, AlignCenter, "Old");
|
canvas_draw_str_aligned(canvas, 105, 51, AlignLeft, AlignCenter, "Old");
|
||||||
} else {
|
} else {
|
||||||
if(cnt_min >= 59) {
|
if(cnt_min >= 59) {
|
||||||
@@ -132,14 +134,19 @@ bool ws_view_receiver_info_input(InputEvent* event, void* context) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws_view_receiver_info_enter(void* context) {
|
static void ws_view_receiver_info_enter(void* context) {
|
||||||
furi_assert(context);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ws_view_receiver_info_exit(void* context) {
|
|
||||||
furi_assert(context);
|
furi_assert(context);
|
||||||
WSReceiverInfo* ws_receiver_info = context;
|
WSReceiverInfo* ws_receiver_info = context;
|
||||||
|
|
||||||
|
furi_timer_start(ws_receiver_info->timer, 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ws_view_receiver_info_exit(void* context) {
|
||||||
|
furi_assert(context);
|
||||||
|
WSReceiverInfo* ws_receiver_info = context;
|
||||||
|
|
||||||
|
furi_timer_stop(ws_receiver_info->timer);
|
||||||
|
|
||||||
with_view_model(
|
with_view_model(
|
||||||
ws_receiver_info->view,
|
ws_receiver_info->view,
|
||||||
WSReceiverInfoModel * model,
|
WSReceiverInfoModel * model,
|
||||||
@@ -147,6 +154,20 @@ void ws_view_receiver_info_exit(void* context) {
|
|||||||
false);
|
false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ws_view_receiver_info_timer(void* context) {
|
||||||
|
WSReceiverInfo* ws_receiver_info = context;
|
||||||
|
// Force redraw
|
||||||
|
with_view_model(
|
||||||
|
ws_receiver_info->view,
|
||||||
|
WSReceiverInfoModel * model,
|
||||||
|
{
|
||||||
|
FuriHalRtcDateTime curr_dt;
|
||||||
|
furi_hal_rtc_get_datetime(&curr_dt);
|
||||||
|
model->curr_ts = furi_hal_rtc_datetime_to_timestamp(&curr_dt);
|
||||||
|
},
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
WSReceiverInfo* ws_view_receiver_info_alloc() {
|
WSReceiverInfo* ws_view_receiver_info_alloc() {
|
||||||
WSReceiverInfo* ws_receiver_info = malloc(sizeof(WSReceiverInfo));
|
WSReceiverInfo* ws_receiver_info = malloc(sizeof(WSReceiverInfo));
|
||||||
|
|
||||||
@@ -169,12 +190,17 @@ WSReceiverInfo* ws_view_receiver_info_alloc() {
|
|||||||
},
|
},
|
||||||
true);
|
true);
|
||||||
|
|
||||||
|
ws_receiver_info->timer =
|
||||||
|
furi_timer_alloc(ws_view_receiver_info_timer, FuriTimerTypePeriodic, ws_receiver_info);
|
||||||
|
|
||||||
return ws_receiver_info;
|
return ws_receiver_info;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ws_view_receiver_info_free(WSReceiverInfo* ws_receiver_info) {
|
void ws_view_receiver_info_free(WSReceiverInfo* ws_receiver_info) {
|
||||||
furi_assert(ws_receiver_info);
|
furi_assert(ws_receiver_info);
|
||||||
|
|
||||||
|
furi_timer_free(ws_receiver_info->timer);
|
||||||
|
|
||||||
with_view_model(
|
with_view_model(
|
||||||
ws_receiver_info->view,
|
ws_receiver_info->view,
|
||||||
WSReceiverInfoModel * model,
|
WSReceiverInfoModel * model,
|
||||||
|
|||||||
@@ -81,7 +81,6 @@ FIRMWARE_APPS = {
|
|||||||
"basic_services",
|
"basic_services",
|
||||||
"updater_app",
|
"updater_app",
|
||||||
"unit_tests",
|
"unit_tests",
|
||||||
"nfc",
|
|
||||||
],
|
],
|
||||||
"debug_pack": [
|
"debug_pack": [
|
||||||
# Svc
|
# Svc
|
||||||
|
|||||||
@@ -376,103 +376,86 @@ static void nfc_generate_mf_classic_4k_7b_uid(NfcDeviceData* data) {
|
|||||||
static const NfcGenerator mf_ul_generator = {
|
static const NfcGenerator mf_ul_generator = {
|
||||||
.name = "Mifare Ultralight",
|
.name = "Mifare Ultralight",
|
||||||
.generator_func = nfc_generate_mf_ul_orig,
|
.generator_func = nfc_generate_mf_ul_orig,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mf_ul_11_generator = {
|
static const NfcGenerator mf_ul_11_generator = {
|
||||||
.name = "Mifare Ultralight EV1 11",
|
.name = "Mifare Ultralight EV1 11",
|
||||||
.generator_func = nfc_generate_mf_ul_11,
|
.generator_func = nfc_generate_mf_ul_11,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mf_ul_h11_generator = {
|
static const NfcGenerator mf_ul_h11_generator = {
|
||||||
.name = "Mifare Ultralight EV1 H11",
|
.name = "Mifare Ultralight EV1 H11",
|
||||||
.generator_func = nfc_generate_mf_ul_h11,
|
.generator_func = nfc_generate_mf_ul_h11,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mf_ul_21_generator = {
|
static const NfcGenerator mf_ul_21_generator = {
|
||||||
.name = "Mifare Ultralight EV1 21",
|
.name = "Mifare Ultralight EV1 21",
|
||||||
.generator_func = nfc_generate_mf_ul_21,
|
.generator_func = nfc_generate_mf_ul_21,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mf_ul_h21_generator = {
|
static const NfcGenerator mf_ul_h21_generator = {
|
||||||
.name = "Mifare Ultralight EV1 H21",
|
.name = "Mifare Ultralight EV1 H21",
|
||||||
.generator_func = nfc_generate_mf_ul_h21,
|
.generator_func = nfc_generate_mf_ul_h21,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag203_generator = {
|
static const NfcGenerator ntag203_generator = {
|
||||||
.name = "NTAG203",
|
.name = "NTAG203",
|
||||||
.generator_func = nfc_generate_mf_ul_ntag203,
|
.generator_func = nfc_generate_mf_ul_ntag203,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag213_generator = {
|
static const NfcGenerator ntag213_generator = {
|
||||||
.name = "NTAG213",
|
.name = "NTAG213",
|
||||||
.generator_func = nfc_generate_ntag213,
|
.generator_func = nfc_generate_ntag213,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag215_generator = {
|
static const NfcGenerator ntag215_generator = {
|
||||||
.name = "NTAG215",
|
.name = "NTAG215",
|
||||||
.generator_func = nfc_generate_ntag215,
|
.generator_func = nfc_generate_ntag215,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag216_generator = {
|
static const NfcGenerator ntag216_generator = {
|
||||||
.name = "NTAG216",
|
.name = "NTAG216",
|
||||||
.generator_func = nfc_generate_ntag216,
|
.generator_func = nfc_generate_ntag216,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag_i2c_1k_generator = {
|
static const NfcGenerator ntag_i2c_1k_generator = {
|
||||||
.name = "NTAG I2C 1k",
|
.name = "NTAG I2C 1k",
|
||||||
.generator_func = nfc_generate_ntag_i2c_1k,
|
.generator_func = nfc_generate_ntag_i2c_1k,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag_i2c_2k_generator = {
|
static const NfcGenerator ntag_i2c_2k_generator = {
|
||||||
.name = "NTAG I2C 2k",
|
.name = "NTAG I2C 2k",
|
||||||
.generator_func = nfc_generate_ntag_i2c_2k,
|
.generator_func = nfc_generate_ntag_i2c_2k,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag_i2c_plus_1k_generator = {
|
static const NfcGenerator ntag_i2c_plus_1k_generator = {
|
||||||
.name = "NTAG I2C Plus 1k",
|
.name = "NTAG I2C Plus 1k",
|
||||||
.generator_func = nfc_generate_ntag_i2c_plus_1k,
|
.generator_func = nfc_generate_ntag_i2c_plus_1k,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator ntag_i2c_plus_2k_generator = {
|
static const NfcGenerator ntag_i2c_plus_2k_generator = {
|
||||||
.name = "NTAG I2C Plus 2k",
|
.name = "NTAG I2C Plus 2k",
|
||||||
.generator_func = nfc_generate_ntag_i2c_plus_2k,
|
.generator_func = nfc_generate_ntag_i2c_plus_2k,
|
||||||
.next_scene = NfcSceneMfUltralightMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mifare_classic_1k_4b_uid_generator = {
|
static const NfcGenerator mifare_classic_1k_4b_uid_generator = {
|
||||||
.name = "Mifare Classic 1k 4byte UID",
|
.name = "Mifare Classic 1k 4byte UID",
|
||||||
.generator_func = nfc_generate_mf_classic_1k_4b_uid,
|
.generator_func = nfc_generate_mf_classic_1k_4b_uid,
|
||||||
.next_scene = NfcSceneMfClassicMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mifare_classic_1k_7b_uid_generator = {
|
static const NfcGenerator mifare_classic_1k_7b_uid_generator = {
|
||||||
.name = "Mifare Classic 1k 7byte UID",
|
.name = "Mifare Classic 1k 7byte UID",
|
||||||
.generator_func = nfc_generate_mf_classic_1k_7b_uid,
|
.generator_func = nfc_generate_mf_classic_1k_7b_uid,
|
||||||
.next_scene = NfcSceneMfClassicMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mifare_classic_4k_4b_uid_generator = {
|
static const NfcGenerator mifare_classic_4k_4b_uid_generator = {
|
||||||
.name = "Mifare Classic 4k 4byte UID",
|
.name = "Mifare Classic 4k 4byte UID",
|
||||||
.generator_func = nfc_generate_mf_classic_4k_4b_uid,
|
.generator_func = nfc_generate_mf_classic_4k_4b_uid,
|
||||||
.next_scene = NfcSceneMfClassicMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static const NfcGenerator mifare_classic_4k_7b_uid_generator = {
|
static const NfcGenerator mifare_classic_4k_7b_uid_generator = {
|
||||||
.name = "Mifare Classic 4k 7byte UID",
|
.name = "Mifare Classic 4k 7byte UID",
|
||||||
.generator_func = nfc_generate_mf_classic_4k_7b_uid,
|
.generator_func = nfc_generate_mf_classic_4k_7b_uid,
|
||||||
.next_scene = NfcSceneMfClassicMenu,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const NfcGenerator* const nfc_generators[] = {
|
const NfcGenerator* const nfc_generators[] = {
|
||||||
@@ -1,14 +1,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "../nfc_i.h"
|
#include "../nfc_device.h"
|
||||||
|
|
||||||
typedef void (*NfcGeneratorFunc)(NfcDeviceData* data);
|
typedef void (*NfcGeneratorFunc)(NfcDeviceData* data);
|
||||||
|
|
||||||
struct NfcGenerator {
|
typedef struct {
|
||||||
const char* name;
|
const char* name;
|
||||||
NfcGeneratorFunc generator_func;
|
NfcGeneratorFunc generator_func;
|
||||||
NfcScene next_scene;
|
} NfcGenerator;
|
||||||
};
|
|
||||||
|
|
||||||
extern const NfcGenerator* const nfc_generators[];
|
extern const NfcGenerator* const nfc_generators[];
|
||||||
|
|
||||||
@@ -77,28 +77,38 @@ def add_env(name, value, file):
|
|||||||
print(f"{delimeter}", file=file)
|
print(f"{delimeter}", file=file)
|
||||||
|
|
||||||
|
|
||||||
def add_envs(data, env_file, args):
|
def add_set_output_var(name, value, file):
|
||||||
add_env("COMMIT_MSG", data["commit_comment"], env_file)
|
print(f"{name}={value}", file=file)
|
||||||
add_env("COMMIT_HASH", data["commit_hash"], env_file)
|
|
||||||
add_env("COMMIT_SHA", data["commit_sha"], env_file)
|
|
||||||
add_env("SUFFIX", data["suffix"], env_file)
|
def add_envs(data, gh_env_file, gh_out_file, args):
|
||||||
add_env("BRANCH_NAME", data["branch_name"], env_file)
|
add_env("COMMIT_MSG", data["commit_comment"], gh_env_file)
|
||||||
add_env("DIST_SUFFIX", data["suffix"], env_file)
|
add_env("COMMIT_HASH", data["commit_hash"], gh_env_file)
|
||||||
add_env("WORKFLOW_BRANCH_OR_TAG", data["branch_name"], env_file)
|
add_env("COMMIT_SHA", data["commit_sha"], gh_env_file)
|
||||||
|
add_env("SUFFIX", data["suffix"], gh_env_file)
|
||||||
|
add_env("BRANCH_NAME", data["branch_name"], gh_env_file)
|
||||||
|
add_env("DIST_SUFFIX", data["suffix"], gh_env_file)
|
||||||
|
add_env("WORKFLOW_BRANCH_OR_TAG", data["branch_name"], gh_env_file)
|
||||||
|
add_set_output_var("branch_name", data["branch_name"], gh_out_file)
|
||||||
|
add_set_output_var("commit_sha", data["commit_sha"], gh_out_file)
|
||||||
|
add_set_output_var("default_target", os.getenv("DEFAULT_TARGET"), gh_out_file)
|
||||||
|
add_set_output_var("suffix", data["suffix"], gh_out_file)
|
||||||
if args.type == "pull":
|
if args.type == "pull":
|
||||||
add_env("PULL_ID", data["pull_id"], env_file)
|
add_env("PULL_ID", data["pull_id"], gh_env_file)
|
||||||
add_env("PULL_NAME", data["pull_name"], env_file)
|
add_env("PULL_NAME", data["pull_name"], gh_env_file)
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
args = parse_args()
|
args = parse_args()
|
||||||
event_file = open(args.event_file)
|
event_file = open(args.event_file, "r")
|
||||||
event = json.load(event_file)
|
event = json.load(event_file)
|
||||||
env_file = open(os.environ["GITHUB_ENV"], "a")
|
gh_env_file = open(os.environ["GITHUB_ENV"], "a")
|
||||||
|
gh_out_file = open(os.environ["GITHUB_OUTPUT"], "a")
|
||||||
data = get_details(event, args)
|
data = get_details(event, args)
|
||||||
add_envs(data, env_file, args)
|
add_envs(data, gh_env_file, gh_out_file, args)
|
||||||
event_file.close()
|
event_file.close()
|
||||||
env_file.close()
|
gh_env_file.close()
|
||||||
|
gh_out_file.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
53
scripts/merge_report_qa.py
Executable file
53
scripts/merge_report_qa.py
Executable file
@@ -0,0 +1,53 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
import argparse
|
||||||
|
from slack_sdk import WebClient
|
||||||
|
from slack_sdk.errors import SlackApiError
|
||||||
|
|
||||||
|
|
||||||
|
def parse_args():
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("slack_token")
|
||||||
|
parser.add_argument("slack_channel")
|
||||||
|
args = parser.parse_args()
|
||||||
|
return args
|
||||||
|
|
||||||
|
|
||||||
|
def checkCommitMessage(msg):
|
||||||
|
regex = re.compile(r"^'?\[FL-\d+\]")
|
||||||
|
if regex.match(msg):
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
def reportSlack(commit_hash, slack_token, slack_channel, message):
|
||||||
|
client = WebClient(token=slack_token)
|
||||||
|
try:
|
||||||
|
client.chat_postMessage(channel="#" + slack_channel, text=message)
|
||||||
|
except SlackApiError as e:
|
||||||
|
print(e)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parse_args()
|
||||||
|
commit_msg = os.getenv("COMMIT_MSG")
|
||||||
|
commit_hash = os.getenv("COMMIT_HASH")
|
||||||
|
commit_sha = os.getenv("COMMIT_SHA")
|
||||||
|
commit_link = (
|
||||||
|
"<https://github.com/flipperdevices/flipperzero-firmware/commit/"
|
||||||
|
+ commit_hash
|
||||||
|
+ "|"
|
||||||
|
+ commit_sha
|
||||||
|
+ ">"
|
||||||
|
)
|
||||||
|
message = "Commit " + commit_link + " merged to dev without 'FL' ticket!"
|
||||||
|
if not checkCommitMessage(commit_msg):
|
||||||
|
reportSlack(commit_hash, args.slack_token, args.slack_channel, message)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
Reference in New Issue
Block a user