Compare commits

..
Author SHA1 Message Date
github-actions[bot] 30449ca473 chore: weekly flake update 2026-06-01 08:42:14 +00:00
tomasrandGitHub 7af79c76b1 Merge pull request #41 from tomasriveral/release/v2.2
[Automatic] Release PR v2.2
2026-05-27 17:42:59 +02:00
github-actions[bot] 27b8b310cb chore(release): v2.2 2026-05-27 15:39:57 +00:00
tomasrandGitHub 4d228fb911 Merge (#40) from tomasriveral/fix-release-workflow-electric-bogaloo
CI: fix release workflow uncorrect branch
2026-05-27 17:38:57 +02:00
tomasr 34a2546990 CI: fix release workflow uncorrect branch 2026-05-27 17:35:42 +02:00
tomasrandGitHub 7231741f2d Merge (#39) from tomasriveral/feat-backup-now
feat: add backup now button
2026-05-27 17:11:43 +02:00
tomasr e86d7e7e03 feat: add backup now button 2026-05-27 17:09:14 +02:00
tomasrandGitHub 280c329339 Merge (#38) from tomasriveral/release/vv2.1.1
[Automatic] Release PR v2.1.1
2026-05-26 11:56:22 +02:00
tomasrandGitHub f7c84136a5 Merge (#37) from tomasriveral/fix-release-workflow
fix: release workflow correct branch
2026-05-26 11:53:33 +02:00
tomasr f66371137a fix: release workflow correct branch 2026-05-26 11:51:08 +02:00
6 changed files with 53 additions and 22 deletions
+4 -4
View File
@@ -26,7 +26,7 @@ jobs:
- name: Create release branch - name: Create release branch
run: | run: |
git checkout -B release/v${{ inputs.version }} git checkout -B release/${{ inputs.version }}
- name: Set version in flake.nix - name: Set version in flake.nix
run: | run: |
@@ -42,14 +42,14 @@ jobs:
- name: Push branch - name: Push branch
run: | run: |
git push origin release/v${{ inputs.version }} git push origin release/${{ inputs.version }}
- name: Create Pull Request - name: Create Pull Request
run: | run: |
gh pr create \ gh pr create \
--base main \ --base main \
--head release/v${{ inputs.version }} \ --head release/${{ inputs.version }} \
--title "[Automatic] Release PR v${{ inputs.version }}" \ --title "[Automatic] Release PR ${{ inputs.version }}" \
--body "Automated release PR.\nAfter the test's succesfull run, create manually a release with a new tag matching ${{ inputs.version }}" --body "Automated release PR.\nAfter the test's succesfull run, create manually a release with a new tag matching ${{ inputs.version }}"
env: env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Generated
+3 -3
View File
@@ -37,11 +37,11 @@
"notewrapper": { "notewrapper": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1779788695, "lastModified": 1779896579,
"narHash": "sha256-JdTeS6rxDEa+A+rQjbFJajBhlwauBApIP3UwvrPbaf4=", "narHash": "sha256-ngPHJ7W36atwMLVQTzP4i5VlS1Lqj9nSt7mKDD6xGiw=",
"owner": "tomasriveral", "owner": "tomasriveral",
"repo": "NoteWrapper", "repo": "NoteWrapper",
"rev": "d537357802940e924d77ebd0fc1a658f884138ea", "rev": "7af79c76b1cdbbf3f516aa76a5ffe7ca169b1cfd",
"type": "github" "type": "github"
}, },
"original": { "original": {
+1 -1
View File
@@ -17,7 +17,7 @@
in { in {
packages.default = pkgs.stdenv.mkDerivation (finalAttrs: { packages.default = pkgs.stdenv.mkDerivation (finalAttrs: {
pname = "notewrapper"; pname = "notewrapper";
version = "v2.1.1"; version = "v2.2";
src = notewrapper; src = notewrapper;
+33 -9
View File
@@ -529,9 +529,14 @@ backup_config_end:
shouldDebug); // check if editor is supported and if it is installed. If not, it shouldDebug); // check if editor is supported and if it is installed. If not, it
// will throw an error. // will throw an error.
int *backupMessage = malloc(sizeof(int)); // Used later to set the backuping message.
*backupMessage = 0; // default don't show the message
int forceBackup = 0;
if (doesBackup) { if (doesBackup) {
debug("Handling backup"); debug("Handling normal backup");
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, shouldDebug); forceBackup = 0;
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, forceBackup, backupMessage, shouldDebug);
debug("backupMessage was set to %d by a normal backup", *backupMessage);
} }
initscr(); // initialize ncurses initscr(); // initialize ncurses
@@ -572,13 +577,26 @@ backup_config_end:
} }
altDebug("└ ------------------------------\n"); altDebug("└ ------------------------------\n");
} }
int extraOptions = 3;
// adds "create a new vault" into the vaultsArray if (doesBackup) {
const int extraOptions = 3; extraOptions++; // space for "Backup now" button
}
if (*backupMessage) {
extraOptions++;
}
vaultsArray = realloc(vaultsArray, (vaultsCount + extraOptions) * sizeof(char *)); // resize vaultsArray to fit the extra options vaultsArray = realloc(vaultsArray, (vaultsCount + extraOptions) * sizeof(char *)); // resize vaultsArray to fit the extra options
vaultsArray[vaultsCount] = "Create a new vault"; // some more options that are not vaults int index = 0;
vaultsArray[vaultsCount + 1] = "Settings"; vaultsArray[vaultsCount + index++] = "Create a new vault"; // some more options that are not vaults
vaultsArray[vaultsCount + 2] = "Quit (Ctrl+C)"; vaultsArray[vaultsCount + index++] = "Settings";
if (doesBackup) {
vaultsArray[vaultsCount + index++] = "Backup now";
}
vaultsArray[vaultsCount + index++] = "Quit (Ctrl+C)";
if (*backupMessage) {
vaultsArray[vaultsCount + index++] = "A backup was launched. Do not immediatly close the program. After a few seconds, you can safely ignore this message.";
};
*backupMessage = 0; // we reset it to show the message only once
vaultSelected = ncursesSelect(vaultsArray, "Select vault to open (Use arrows or WASD, Enter to select):", vaultsCount, extraOptions, " ", "Or select an option below", "", shouldDebug); vaultSelected = ncursesSelect(vaultsArray, "Select vault to open (Use arrows or WASD, Enter to select):", vaultsCount, extraOptions, " ", "Or select an option below", "", shouldDebug);
@@ -594,7 +612,8 @@ backup_config_end:
} }
debug("Selected vault: %s", vaultSelected); debug("Selected vault: %s", vaultSelected);
if (strcmp(vaultSelected, "Create a new vault") != 0 && strcmp(vaultSelected, "Settings") != 0 && strcmp(vaultSelected, "Quit (Ctrl+C)") != 0) { if (strcmp(vaultSelected, "Create a new vault") != 0 && strcmp(vaultSelected, "Settings") != 0 && strcmp(vaultSelected, "Quit (Ctrl+C)") != 0 && strcmp(vaultSelected, "Backup now") != 0 &&
strcmp(vaultSelected, "A backup was launched. Do not immediatly close the program. After a few seconds, you can safely ignore this message.") != 0) {
note_selection: note_selection:
bypassSelectionVault = 0; // we must reset bypassSelectionVault to not get stuck in a bypassSelectionVault = 0; // we must reset bypassSelectionVault to not get stuck in a
// infinite loop of bypassing // infinite loop of bypassing
@@ -731,6 +750,11 @@ backup_config_end:
} else if (strcmp(vaultSelected, "Settings") == 0) { } else if (strcmp(vaultSelected, "Settings") == 0) {
openEditor(configPath, editorToOpen, 0, 0, openEditor(configPath, editorToOpen, 0, 0,
shouldDebug); // as this is not a md file we set render and jumptoEnfOfFile to 0 shouldDebug); // as this is not a md file we set render and jumptoEnfOfFile to 0
} else if (strcmp(vaultSelected, "Backup now") == 0) {
debug("Running a forced backup");
forceBackup = 1;
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, forceBackup, backupMessage, shouldDebug);
debug("backupMessage was set to %d by a normal backup", *backupMessage);
} else if (strcmp(vaultSelected, "Quit (Ctrl+C)") == 0) { } else if (strcmp(vaultSelected, "Quit (Ctrl+C)") == 0) {
debug("The program was exited"); debug("The program was exited");
shouldExit = 1; shouldExit = 1;
+8 -2
View File
@@ -167,8 +167,9 @@ void initAppFilesAndDirs(const char *home, const int shouldDebug) {
} }
void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArguments, const int rsyncArgumentsNumber, void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArguments, const int rsyncArgumentsNumber,
const int shouldDebug) { const int forceBackup, int *backupMessage, const int shouldDebug) {
int shouldBackup = 0; int shouldBackup = 0;
time_t now = time(NULL); time_t now = time(NULL);
debug("Time since epoch is %ld", (long)now); debug("Time since epoch is %ld", (long)now);
char cacheFilePATH[PATH_MAX]; char cacheFilePATH[PATH_MAX];
@@ -203,8 +204,12 @@ void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **d
error(1, "program", "Invalid timestamp in cache file: %s", line); error(1, "program", "Invalid timestamp in cache file: %s", line);
} }
double deltaTime = difftime(now, lastBackupTime); double deltaTime = difftime(now, lastBackupTime);
if (deltaTime > interval) { if (deltaTime > interval || forceBackup) {
if (!forceBackup) {
debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval); debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval);
} else {
debug("Backup was forced. backuping...");
}
shouldBackup = 1; shouldBackup = 1;
cacheFile = fopen(cacheFilePATH, "w"); cacheFile = fopen(cacheFilePATH, "w");
if (!cacheFile) { if (!cacheFile) {
@@ -218,6 +223,7 @@ void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **d
} }
if (shouldBackup) { if (shouldBackup) {
*backupMessage = 1;
debug("A backup is needed"); debug("A backup is needed");
for (int i = 0; i < sourceNumber; i++) { for (int i = 0; i < sourceNumber; i++) {
debug("%s", destinationDirectoryArray[i]); debug("%s", destinationDirectoryArray[i]);
+3 -2
View File
@@ -81,7 +81,8 @@ If need launches in the background rsync to do the backuping.
Each pair of source/destination will launch one rsync process. Each pair of source/destination will launch one rsync process.
If a pair don't need to be backed up, the destination should be set to NULL. If a pair don't need to be backed up, the destination should be set to NULL.
rsyncArgs is the array of arguments to be passed to rsync. Do not inclue destination or source. It rsyncArgs is the array of arguments to be passed to rsync. Do not inclue destination or source. It
will be added in the function.*/ will be added in the function.
backupMessage will be set to 1 if a backup was launched.*/
void handleBackups(char **sourceDirectoryArray, const int sourceDirectoryNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArgs, const int rsyncArgsNumber, void handleBackups(char **sourceDirectoryArray, const int sourceDirectoryNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArgs, const int rsyncArgsNumber,
const int shouldDebug); const int forceBackup, int *backupMessage, const int shouldDebug);
#endif #endif