# pcp Pixel Code Platform Self-hostable coding challenges platform --- ## Frontends - [PixelSam123/pcp_frontend](https://github.com/PixelSam123/pcp_frontend) - [PixelSam123/pcp_frontend_web](https://github.com/PixelSam123/pcp_frontend_web) ## Status Unless there are obvious issues found later, I'm not going to change the API URIs or request/response schemas anymore. Implementation changes might still happen though. ## Deployment guide First, build the app with Gradle: ``` ./gradlew build ``` Then, prepare public and private key pairs. This will be put in the environment variables file. ``` openssl genrsa -out rsaPrivateKey.pem 2048 openssl rsa -pubout -in rsaPrivateKey.pem -out publicKey.pem openssl pkcs8 -topk8 -nocrypt -inform pem -in rsaPrivateKey.pem -outform pem -out privateKey.pem rm rsaPrivateKey.pem ``` You need to run the app with these environment variables, either from the command line or a `.env` file. ``` MP_JWT_VERIFY_PUBLICKEY= SMALLRYE_JWT_SIGN_KEY= QUARKUS_DATASOURCE_DB_KIND= QUARKUS_DATASOURCE_JDBC_URL= QUARKUS_DATASOURCE_USERNAME= QUARKUS_DATASOURCE_PASSWORD= QUARKUS_HTTP_CORS_ORIGINS= QUARKUS_REST_CLIENT_CODE_EXEC_SERVER_URL= ``` - QUARKUS_DATASOURCE_DB_KIND can either be `mysql` or `mariadb`. `src/main/resources/db/changeLog.sql` is tested on those. - `QUARKUS_REST_CLIENT_CODE_EXEC_SERVER_URL` is an instance of either [coxecude](https://github.com/PixelSam123/coxecude) or [containexec](https://github.com/PixelSam123/containexec). You can also create your own code execution server that exposes an API similar to `coxecude`. Start the app with this command: ``` java -jar build/(build result file).jar ``` Original README from Quarkus below. --- This project uses Quarkus, the Supersonic Subatomic Java Framework. If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ . ## Running the application in dev mode You can run your application in dev mode that enables live coding using: ```shell script ./gradlew quarkusDev ``` > **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only > at http://localhost:8080/q/dev/. ## Packaging and running the application The application can be packaged using: ```shell script ./gradlew build ``` It produces the `quarkus-run.jar` file in the `build/quarkus-app/` directory. Be aware that it’s not an _über-jar_ as the dependencies are copied into the `build/quarkus-app/lib/` directory. The application is now runnable using `java -jar build/quarkus-app/quarkus-run.jar`. If you want to build an _über-jar_, execute the following command: ```shell script ./gradlew build -Dquarkus.package.type=uber-jar ``` The application, packaged as an _über-jar_, is now runnable using `java -jar build/*-runner.jar`. ## Creating a native executable You can create a native executable using: ```shell script ./gradlew build -Dquarkus.package.type=native ``` Or, if you don't have GraalVM installed, you can run the native executable build in a container using: ```shell script ./gradlew build -Dquarkus.package.type=native -Dquarkus.native.container-build=true ``` You can then execute your native executable with: `./build/pcp-1.0-SNAPSHOT-runner` If you want to learn more about building native executables, please consult https://quarkus.io/guides/gradle-tooling.