Skip to content

Commit 4c49df4

Browse files
authored
feat: support specifying github release tag (#29)
1 parent 1dbbc24 commit 4c49df4

File tree

6 files changed

+46
-5
lines changed

6 files changed

+46
-5
lines changed

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ Display detailed information about a specific package.
115115
|--------|-------------|
116116
| `--modules-dir <path>` | Set core modules installation directory |
117117
| `--ui-plugins-dir <path>` | Set UI plugins installation directory |
118+
| `--release <tag>` | GitHub release tag to use (default: `latest`) |
118119
| `--json` | Output results in JSON format |
119120
| `-h, --help` | Show help message |
120121
| `-v, --version` | Show version information |
@@ -142,6 +143,12 @@ lgpm info waku-module
142143

143144
# Install to a custom directory
144145
lgpm --modules-dir /path/to/modules install waku-module
146+
147+
# Install from a specific release instead of "latest"
148+
lgpm --release v2.1.0 install waku-module
149+
150+
# List packages available in a specific release
151+
lgpm --release v2.1.0 list --json
145152
```
146153

147154
## Dependencies

cmd/main.cpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ void printHelp() {
253253
out << "Options:" << Qt::endl;
254254
out << " --modules-dir <path> Set core modules directory" << Qt::endl;
255255
out << " --ui-plugins-dir <path> Set UI plugins directory" << Qt::endl;
256+
out << " --release <tag> GitHub release tag to use (default: latest)" << Qt::endl;
256257
out << " --category <cat> Filter by category (for list command)" << Qt::endl;
257258
out << " --installed Show only installed packages (for list command)" << Qt::endl;
258259
out << " --file <path> Install from a local LGX file (for install command)" << Qt::endl;
@@ -278,6 +279,7 @@ int main(int argc, char *argv[]) {
278279
QCommandLineOption installedOption("installed", "Show only installed packages");
279280
QCommandLineOption jsonOption("json", "Output in JSON format");
280281
QCommandLineOption fileOption("file", "Install from a local LGX file path", "path");
282+
QCommandLineOption releaseOption("release", "GitHub release tag to use (default: latest)", "tag", "latest");
281283

282284
parser.addOption(helpOption);
283285
parser.addOption(versionOption);
@@ -287,6 +289,7 @@ int main(int argc, char *argv[]) {
287289
parser.addOption(installedOption);
288290
parser.addOption(jsonOption);
289291
parser.addOption(fileOption);
292+
parser.addOption(releaseOption);
290293
parser.addPositionalArgument("command", "Command to run");
291294
parser.addPositionalArgument("args", "Command arguments", "[args...]");
292295

@@ -321,6 +324,10 @@ int main(int argc, char *argv[]) {
321324
if (parser.isSet(uiPluginsDirOption)) {
322325
pm.setUiPluginsDirectory(parser.value(uiPluginsDirOption));
323326
}
327+
328+
if (parser.isSet(releaseOption)) {
329+
pm.setRelease(parser.value(releaseOption));
330+
}
324331

325332
if (command == "search") {
326333
return cmdSearch(pm, positionalArgs, jsonOutput);

src/lib/package_manager_lib.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
#include <algorithm>
1515
#include "lgx.h"
1616

17-
static const QString MODULES_DOWNLOAD_BASE_URL = QStringLiteral("https://github.com/logos-co/logos-modules/releases/latest/download");
17+
static const QString MODULES_REPO_BASE = QStringLiteral("https://github.com/logos-co/logos-modules/releases");
1818

1919
// Returns true if version string `a` is >= `b`, comparing dot-separated numeric segments.
2020
static bool versionGreaterOrEqual(const QString& a, const QString& b)
@@ -33,6 +33,7 @@ static bool versionGreaterOrEqual(const QString& a, const QString& b)
3333

3434
PackageManagerLib::PackageManagerLib(QObject* parent)
3535
: QObject(parent)
36+
, m_releaseTag(QStringLiteral("latest"))
3637
, m_networkManager(nullptr)
3738
, m_isInstalling(false)
3839
{
@@ -57,6 +58,20 @@ void PackageManagerLib::setUiPluginsDirectory(const QString& uiPluginsDirectory)
5758
qDebug() << "Set UI plugins directory to:" << m_uiPluginsDirectory;
5859
}
5960

61+
void PackageManagerLib::setRelease(const QString& releaseTag)
62+
{
63+
m_releaseTag = releaseTag.isEmpty() ? QStringLiteral("latest") : releaseTag;
64+
qDebug() << "Set release tag to:" << m_releaseTag;
65+
}
66+
67+
QString PackageManagerLib::downloadBaseUrl() const
68+
{
69+
if (m_releaseTag == "latest") {
70+
return MODULES_REPO_BASE + "/latest/download";
71+
}
72+
return MODULES_REPO_BASE + "/download/" + m_releaseTag;
73+
}
74+
6075
QString PackageManagerLib::installPluginFile(const QString& pluginPath, QString& errorMsg, bool skipIfNotNewerVersion)
6176
{
6277
qDebug() << "PackageManagerLib: Installing plugin file:" << pluginPath;
@@ -407,7 +422,7 @@ bool PackageManagerLib::installPackage(const QString& packageName)
407422
}
408423

409424
// Download the LGX package file
410-
QString downloadUrl = QString("%1/%2").arg(MODULES_DOWNLOAD_BASE_URL, packageFile);
425+
QString downloadUrl = QString("%1/%2").arg(downloadBaseUrl(), packageFile);
411426
QString destinationPath = QDir(tempDir).filePath(packageFile);
412427

413428
qDebug() << "Downloading package file:" << packageFile;
@@ -503,7 +518,7 @@ void PackageManagerLib::startAsyncPackageListFetch()
503518
return;
504519
}
505520

506-
QString urlString = QString("%1/list.json").arg(MODULES_DOWNLOAD_BASE_URL);
521+
QString urlString = QString("%1/list.json").arg(downloadBaseUrl());
507522
QUrl url(urlString);
508523
QNetworkRequest request(url);
509524

@@ -602,7 +617,7 @@ void PackageManagerLib::startNextFileDownload()
602617
}
603618

604619
QString fileName = m_asyncState.filesToDownload[m_asyncState.currentDownloadIndex];
605-
QString downloadUrl = QString("%1/%2").arg(MODULES_DOWNLOAD_BASE_URL, fileName);
620+
QString downloadUrl = QString("%1/%2").arg(downloadBaseUrl(), fileName);
606621

607622
qDebug() << "Async: Downloading package file:" << fileName;
608623

@@ -714,7 +729,7 @@ QJsonArray PackageManagerLib::fetchPackageListFromOnline()
714729
return packagesArray;
715730
}
716731

717-
QString urlString = QString("%1/list.json").arg(MODULES_DOWNLOAD_BASE_URL);
732+
QString urlString = QString("%1/list.json").arg(downloadBaseUrl());
718733
QUrl url(urlString);
719734
QNetworkRequest request(url);
720735

src/lib/package_manager_lib.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ class PackageManagerLib : public QObject
2222
QString pluginsDirectory() const { return m_pluginsDirectory; }
2323
QString uiPluginsDirectory() const { return m_uiPluginsDirectory; }
2424

25+
// Release tag (defaults to "latest")
26+
void setRelease(const QString& releaseTag);
27+
QString release() const { return m_releaseTag; }
28+
2529
QString installPluginFile(const QString& pluginPath, QString& errorMsg, bool skipIfNotNewerVersion = false);
2630

2731
QJsonArray getPackages();
@@ -62,6 +66,7 @@ private slots:
6266
private:
6367
QString m_pluginsDirectory;
6468
QString m_uiPluginsDirectory;
69+
QString m_releaseTag;
6570
QNetworkAccessManager* m_networkManager;
6671

6772
struct AsyncInstallState {
@@ -78,6 +83,8 @@ private slots:
7883
bool m_isInstalling;
7984
QQueue<QStringList> m_requestQueue;
8085

86+
QString downloadBaseUrl() const;
87+
8188
void startAsyncPackageListFetch();
8289
void startNextFileDownload();
8390
void finishAsyncInstallation(bool success, const QString& error);

src/package_manager_plugin.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,3 +153,7 @@ void PackageManagerPlugin::setPluginsDirectory(const QString& pluginsDirectory)
153153
void PackageManagerPlugin::setUiPluginsDirectory(const QString& uiPluginsDirectory) {
154154
m_lib->setUiPluginsDirectory(uiPluginsDirectory);
155155
}
156+
157+
void PackageManagerPlugin::setRelease(const QString& releaseTag) {
158+
m_lib->setRelease(releaseTag);
159+
}

src/package_manager_plugin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class PackageManagerPlugin : public QObject, public PackageManagerInterface
2727
Q_INVOKABLE QStringList resolveDependencies(const QStringList& packageNames);
2828
Q_INVOKABLE void setPluginsDirectory(const QString& pluginsDirectory);
2929
Q_INVOKABLE void setUiPluginsDirectory(const QString& uiPluginsDirectory);
30+
Q_INVOKABLE void setRelease(const QString& releaseTag);
3031
Q_INVOKABLE bool installPackage(const QString& packageName, const QString& pluginsDirectory);
3132
Q_INVOKABLE bool installPackages(const QStringList& packageNames, const QString& pluginsDirectory);
3233
Q_INVOKABLE void installPackageAsync(const QString& packageName, const QString& pluginsDirectory);

0 commit comments

Comments
 (0)