Add github actions and update Dockerfile

This commit is contained in:
Maschell 2024-03-08 19:09:13 +01:00
parent f608849dce
commit 4f8f277572
8 changed files with 151 additions and 33 deletions

View File

@ -7,9 +7,7 @@ AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: false AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: false AlignEscapedNewlinesLeft: false
AlignOperands: true AlignOperands: true
AlignTrailingComments: AlignTrailingComments: true
Kind: Always
OverEmptyLines: 0
AllowAllParametersOfDeclarationOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false AllowShortCaseLabelsOnASingleLine: false

59
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,59 @@
name: CI-Release
on:
push:
branches:
- main
jobs:
clang-format:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: clang-format
run: |
docker run --rm -v ${PWD}:/src ghcr.io/wiiu-env/clang-format:13.0.0-2 -r ./source ./include
build-binary:
runs-on: ubuntu-22.04
needs: clang-format
steps:
- uses: actions/checkout@v3
- name: create version.h
run: |
git_hash=$(git rev-parse --short "$GITHUB_SHA")
cat <<EOF > ./source/wiiu/version.h
#pragma once
#define VERSION_EXTRA " (nightly-$git_hash)"
EOF
- name: build binary
run: |
docker build . -t builder
docker run --rm -v ${PWD}:/project builder make
- uses: actions/upload-artifact@master
with:
name: binary
path: "*.wps"
deploy-binary:
needs: build-binary
runs-on: ubuntu-22.04
steps:
- name: Get environment variables
id: get_repository_name
run: |
echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
echo DATETIME=$(echo $(date '+%Y%m%d-%H%M%S')) >> $GITHUB_ENV
- uses: actions/download-artifact@master
with:
name: binary
- name: zip artifact
run: zip -r ${{ env.REPOSITORY_NAME }}_${{ env.DATETIME }}.zip *.wps
- name: Create Release
uses: "softprops/action-gh-release@v1"
with:
tag_name: ${{ env.REPOSITORY_NAME }}-${{ env.DATETIME }}
draft: false
prerelease: true
generate_release_notes: true
name: Nightly-${{ env.REPOSITORY_NAME }}-${{ env.DATETIME }}
files: |
./${{ env.REPOSITORY_NAME }}_${{ env.DATETIME }}.zip

43
.github/workflows/pr.yml vendored Normal file
View File

@ -0,0 +1,43 @@
name: CI-PR
on: [pull_request]
jobs:
clang-format:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- name: clang-format
run: |
docker run --rm -v ${PWD}:/src ghcr.io/wiiu-env/clang-format:13.0.0-2 -r ./source ./include
check-build-with-logging:
runs-on: ubuntu-22.04
needs: clang-format
steps:
- uses: actions/checkout@v2
- name: build binary with logging
run: |
docker build . -t builder
docker run --rm -v ${PWD}:/project builder make DEBUG=VERBOSE
docker run --rm -v ${PWD}:/project builder make clean
docker run --rm -v ${PWD}:/project builder make DEBUG=1
build-binary:
runs-on: ubuntu-22.04
needs: clang-format
steps:
- uses: actions/checkout@v3
- name: create version.h
run: |
git_hash=$(git rev-parse --short "${{ github.event.pull_request.head.sha }}")
cat <<EOF > ./source/wiiu/version.h
#pragma once
#define VERSION_EXTRA " (nightly-$git_hash)"
EOF
- name: build binary
run: |
docker build . -t builder
docker run --rm -v ${PWD}:/project builder make
- uses: actions/upload-artifact@master
with:
name: binary
path: "*.wps"

View File

@ -1,6 +1,6 @@
FROM ghcr.io/wiiu-env/devkitppc:20231112 FROM ghcr.io/wiiu-env/devkitppc:20231112
COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:20230719 /artifacts $DEVKITPRO COPY --from=ghcr.io/wiiu-env/wiiupluginsystem:0.8.0-dev-20240302-3b5cc2f /artifacts $DEVKITPRO
COPY --from=ghcr.io/wiiu-env/libmocha:20230621 /artifacts $DEVKITPRO COPY --from=ghcr.io/wiiu-env/libmocha:20231127 /artifacts $DEVKITPRO
WORKDIR project WORKDIR project

View File

@ -53,7 +53,7 @@ docker run -it --rm -v ${PWD}:/project ftpiiuplugin-builder make clean
## Format the code via docker ## Format the code via docker
`docker run --rm -v ${PWD}:/src ghcr.io/wiiu-env/clang-format:13.0.0-2 -r ./src -i` `docker run --rm -v ${PWD}:/src ghcr.io/wiiu-env/clang-format:13.0.0-2 -r ./source ./include -i`
## Credits ## Credits

View File

@ -124,7 +124,7 @@ void drawLog ()
#ifdef __WIIU__ #ifdef __WIIU__
for (auto &cur : s_messages) for (auto &cur : s_messages)
{ {
OSReport ("%s %s\x1b[0m", s_colors[cur.level], cur.message.c_str ()); OSReport ("ftpiiu plugin: %s %s\x1b[0m", s_colors[cur.level], cur.message.c_str ());
} }
#else #else
auto it = std::begin (s_messages); auto it = std::begin (s_messages);

View File

@ -19,6 +19,7 @@
// along with this program. If not, see <https://www.gnu.org/licenses/>. // along with this program. If not, see <https://www.gnu.org/licenses/>.
#include "platform.h" #include "platform.h"
#include "version.h"
#include "IOAbstraction.h" #include "IOAbstraction.h"
#include "ftpServer.h" #include "ftpServer.h"
@ -39,16 +40,20 @@
#ifndef CLASSIC #ifndef CLASSIC
#error "Wii U must be built in classic mode" #error "Wii U must be built in classic mode"
#endif #endif
#define VERSION_FULL "0.1" #define VERSION "v0.4.1"
#define VERSION_FULL VERSION VERSION_EXTRA
WUPS_PLUGIN_NAME ("ftpd"); WUPS_PLUGIN_NAME ("ftpiiu");
WUPS_PLUGIN_DESCRIPTION ("FTP Server"); WUPS_PLUGIN_DESCRIPTION ("FTP Server based on ftpd");
WUPS_PLUGIN_VERSION (VERSION_FULL); WUPS_PLUGIN_VERSION (VERSION_FULL);
WUPS_PLUGIN_AUTHOR ("mtheall, Maschell"); WUPS_PLUGIN_AUTHOR ("mtheall, Maschell");
WUPS_PLUGIN_LICENSE ("GPL"); WUPS_PLUGIN_LICENSE ("GPL3");
WUPS_USE_WUT_DEVOPTAB (); WUPS_USE_WUT_DEVOPTAB ();
WUPS_USE_STORAGE ("ftpd"); // Unqiue id for the storage api WUPS_USE_STORAGE ("ftpiiu"); // Unique id for the storage api
#define DEFAULT_FTPIIU_ENABLED_VALUE true
#define DEFAULT_SYSTEM_FILES_ALLOWED_VALUE false
#define FTPIIU_ENABLED_STRING "enabled" #define FTPIIU_ENABLED_STRING "enabled"
#define SYSTEM_FILES_ALLOWED_STRING "systemFilesAllowed" #define SYSTEM_FILES_ALLOWED_STRING "systemFilesAllowed"
@ -60,8 +65,8 @@ bool platform::networkVisible ()
bool platform::networkAddress (SockAddr &addr_) bool platform::networkAddress (SockAddr &addr_)
{ {
struct sockaddr_in addr; struct sockaddr_in addr = {};
addr.sin_family = AF_INET; addr.sin_family = AF_INET;
nn::ac::GetAssignedAddress (&addr.sin_addr.s_addr); nn::ac::GetAssignedAddress (&addr.sin_addr.s_addr);
addr_ = addr; addr_ = addr;
return true; return true;
@ -86,10 +91,10 @@ MochaUtilsStatus MountWrapper (const char *mount, const char *dev, const char *m
return res; return res;
} }
UniqueFtpServer server = nullptr; UniqueFtpServer server = nullptr;
bool sSystemFilesAllowed = false; static bool sSystemFilesAllowed = DEFAULT_SYSTEM_FILES_ALLOWED_VALUE;
bool sMochaPathsWereMounted = false; static bool sMochaPathsWereMounted = false;
bool sFTPServerEnabled = true; static bool sFTPServerEnabled = DEFAULT_FTPIIU_ENABLED_VALUE;
void start_server () void start_server ()
{ {
@ -189,7 +194,7 @@ void stop_server ()
IOAbstraction::clear (); IOAbstraction::clear ();
} }
void gFTPServerRunningChanged (ConfigItemBoolean *item, bool newValue) static void gFTPServerRunningChanged (ConfigItemBoolean *item, bool newValue)
{ {
sFTPServerEnabled = newValue; sFTPServerEnabled = newValue;
if (!sFTPServerEnabled) if (!sFTPServerEnabled)
@ -210,7 +215,7 @@ void gFTPServerRunningChanged (ConfigItemBoolean *item, bool newValue)
} }
} }
void gSystemFilesAllowedChanged (ConfigItemBoolean *item, bool newValue) static void gSystemFilesAllowedChanged (ConfigItemBoolean *item, bool newValue)
{ {
// DEBUG_FUNCTION_LINE("New value in gFTPServerEnabled: %d", newValue); // DEBUG_FUNCTION_LINE("New value in gFTPServerEnabled: %d", newValue);
if (server != nullptr) if (server != nullptr)
@ -264,7 +269,7 @@ WUPSConfigAPICallbackStatus ConfigMenuOpenedCallback (WUPSConfigCategoryHandle r
(hostIpAddress >> 16) & 0xFF, (hostIpAddress >> 16) & 0xFF,
(hostIpAddress >> 8) & 0xFF, (hostIpAddress >> 8) & 0xFF,
(hostIpAddress >> 0) & 0xFF, (hostIpAddress >> 0) & 0xFF,
5000); 21);
} }
else else
{ {
@ -277,7 +282,7 @@ WUPSConfigAPICallbackStatus ConfigMenuOpenedCallback (WUPSConfigCategoryHandle r
} }
catch (std::exception &e) catch (std::exception &e)
{ {
OSReport ("Exception T_T : %s\n", e.what ()); OSReport ("fptiiu plugin: Exception: %s\n", e.what ());
return WUPSCONFIG_API_CALLBACK_RESULT_ERROR; return WUPSCONFIG_API_CALLBACK_RESULT_ERROR;
} }
@ -286,32 +291,43 @@ WUPSConfigAPICallbackStatus ConfigMenuOpenedCallback (WUPSConfigCategoryHandle r
void ConfigMenuClosedCallback () void ConfigMenuClosedCallback ()
{ {
OSReport ("ConfigMenuClosedCallback\n");
WUPSStorageAPI::SaveStorage (); WUPSStorageAPI::SaveStorage ();
} }
INITIALIZE_PLUGIN () INITIALIZE_PLUGIN ()
{ {
WUPSConfigAPIOptionsV1 configOptions = {.name = "ftpd"}; WUPSConfigAPIOptionsV1 configOptions = {.name = "ftpiiu"};
if (WUPSConfigAPI_Init (configOptions, ConfigMenuOpenedCallback, ConfigMenuClosedCallback) != if (WUPSConfigAPI_Init (configOptions, ConfigMenuOpenedCallback, ConfigMenuClosedCallback) !=
WUPSCONFIG_API_RESULT_SUCCESS) WUPSCONFIG_API_RESULT_SUCCESS)
{ {
OSFatal ("Failed to init config api"); OSFatal ("ftpiiu plugin: Failed to init config api");
} }
if (WUPSStorageAPI::GetOrStoreDefault (FTPIIU_ENABLED_STRING, sFTPServerEnabled, true) != WUPSStorageError err;
if ((err = WUPSStorageAPI::GetOrStoreDefault (
FTPIIU_ENABLED_STRING, sFTPServerEnabled, DEFAULT_FTPIIU_ENABLED_VALUE)) !=
WUPS_STORAGE_ERROR_SUCCESS) WUPS_STORAGE_ERROR_SUCCESS)
{ {
OSReport ("Failed\n"); OSReport ("ftpiiu plugin: Failed to get or create item \"%s\": %s (%d)\n",
FTPIIU_ENABLED_STRING,
WUPSStorageAPI_GetStatusStr (err),
err);
} }
if (WUPSStorageAPI::GetOrStoreDefault ( if ((err = WUPSStorageAPI::GetOrStoreDefault (SYSTEM_FILES_ALLOWED_STRING,
SYSTEM_FILES_ALLOWED_STRING, sSystemFilesAllowed, false) != WUPS_STORAGE_ERROR_SUCCESS) sSystemFilesAllowed,
DEFAULT_SYSTEM_FILES_ALLOWED_VALUE)) != WUPS_STORAGE_ERROR_SUCCESS)
{ {
OSReport ("Failed\n"); OSReport ("ftpiiu plugin: Failed to get or create item \"%s\": %s (%d)\n",
SYSTEM_FILES_ALLOWED_STRING,
WUPSStorageAPI_GetStatusStr (err),
err);
} }
if (WUPSStorageAPI::SaveStorage () != WUPS_STORAGE_ERROR_SUCCESS)
if ((err = WUPSStorageAPI::SaveStorage ()) != WUPS_STORAGE_ERROR_SUCCESS)
{ {
OSReport ("Failed\n"); OSReport ("ftpiiu plugin: Failed to save storage: %s (%d)\n",
WUPSStorageAPI_GetStatusStr (err),
err);
} }
} }
@ -372,7 +388,7 @@ public:
explicit privateData_t (std::function<void ()> &&func_) : thread (std::move (func_)) explicit privateData_t (std::function<void ()> &&func_) : thread (std::move (func_))
{ {
auto nativeHandle = (OSThread *)thread.native_handle (); auto nativeHandle = (OSThread *)thread.native_handle ();
OSSetThreadName (nativeHandle, "ftpd"); OSSetThreadName (nativeHandle, "ftpiiu");
while (!OSSetThreadAffinity (nativeHandle, OS_THREAD_ATTRIB_AFFINITY_CPU2)) while (!OSSetThreadAffinity (nativeHandle, OS_THREAD_ATTRIB_AFFINITY_CPU2))
{ {
OSSleepTicks (OSMillisecondsToTicks (16)); OSSleepTicks (OSMillisecondsToTicks (16));

2
source/wiiu/version.h Normal file
View File

@ -0,0 +1,2 @@
#pragma once
#define VERSION_EXTRA ""