Fix 2 bugs (#200)

* fix source_code null issue for non-mips

* fix preset setting not changing opts

* CompilerPreset type

* try to fix gh actions

* libprotobuf-dev

* protobuf-compiler

* libnl-route-3-dev

* oopth
This commit is contained in:
Ethan Roseman
2021-11-13 08:48:24 -05:00
committed by GitHub
parent eae9bab41d
commit 16485ffd6c
7 changed files with 35 additions and 11 deletions

2
.env
View File

@@ -2,6 +2,6 @@ DEBUG=on
SECRET_KEY=django-insecure-nm#!8%z$hc0wwi#m_*l9l)=m*6gs4&o_^-e5b5vj*k05&yaqc1
DATABASE_URL=sqlite:///dev.db
API_BASE=http://127.0.0.1:8000/api
USE_SANDBOX_JAIL=off
USE_SANDBOX_JAIL=on
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=

View File

@@ -27,8 +27,13 @@ jobs:
python-version: 3.9
- run: pip install -r backend/requirements.txt
name: Install Python dependencies
- run: sudo apt install binutils-mips-linux-gnu
name: Install binutils-mips-linux-gnu
- run: sudo apt install binutils-mips-linux-gnu libprotobuf-dev libnl-route-3-dev protobuf-compiler
name: Install dependencies
- run: |
git clone --recursive --branch=3.0 https://github.com/google/nsjail && cd nsjail
make
sudo cp nsjail /usr/bin/
name: Install nsjail
- run: ./backend/compilers/download.sh
name: Download compilers
- run: python backend/manage.py test backend

1
.gitignore vendored
View File

@@ -16,3 +16,4 @@ sandbox/
/frontend/public/sw.*
/frontend/public/workbox-*
/frontend/storybook-static
.vscode/launch.json

View File

@@ -232,6 +232,7 @@ def create_scratch(request):
source_code = data.get("source_code")
if not source_code:
default_source_code = f"void {diff_label or 'func'}(void) {{\n // ...\n}}\n"
source_code = default_source_code
arch = CompilerWrapper.arch_from_platform(platform)
if arch in ["mips", "mipsel"]:
try:

View File

@@ -60,6 +60,12 @@ export type CompilerOptsT = {
compiler_flags: string
}
export type CompilerPreset = {
name: string
compiler: string
opts: string
}
export type Props = {
platform?: string
value: CompilerOptsT
@@ -86,6 +92,13 @@ export default function CompilerOpts({ platform, value, onChange, title, isPopup
})
}
const setPreset = (preset: CompilerPreset) => {
onChange({
compiler: preset.compiler,
compiler_flags: preset.opts,
})
}
return <OptsContext.Provider value={{
checkFlag(flag: string) {
return (" " + opts + " ").includes(" " + flag + " ")
@@ -103,7 +116,7 @@ export default function CompilerOpts({ platform, value, onChange, title, isPopup
}}>
<div className={styles.header} data-is-popup={isPopup}>
{title || "Compiler Options"}
<PresetSelect platform={platform} compiler={compiler} setCompiler={setCompiler} opts={opts} setOpts={setOpts} />
<PresetSelect platform={platform} compiler={compiler} opts={opts} setPreset={setPreset} />
</div>
<div className={styles.container} data-is-popup={isPopup}>
<OptsEditor platform={platform} compiler={compiler} setCompiler={setCompiler} opts={opts} setOpts={setOpts} />

View File

@@ -1,6 +1,7 @@
import Select from "../Select"
import { CompilerPreset } from "./CompilerOpts"
import { useCompilersForPlatform } from "./compilers"
export const PRESETS = [
@@ -66,13 +67,12 @@ export const PRESETS = [
},
]
export default function PresetSelect({ className, platform, compiler, opts, setCompiler, setOpts, serverCompilers }: {
export default function PresetSelect({ className, platform, compiler, opts, setPreset, serverCompilers }: {
className?: string
platform: string
compiler: string
opts: string
setCompiler: (compiler: string) => void
setOpts: (opts: string) => void
setPreset: (preset: CompilerPreset) => void
serverCompilers?: Record<string, { platform: string | null }>
}) {
const compilers = useCompilersForPlatform(platform, serverCompilers)
@@ -87,8 +87,7 @@ export default function PresetSelect({ className, platform, compiler, opts, setC
const preset = presets.find(p => p.name === (e.target as HTMLSelectElement).value)
setOpts(preset.opts)
setCompiler(preset.compiler)
setPreset(preset)
}}>
{!selectedPreset && <option value="custom" selected>Custom</option>}
{presets.map(preset =>

View File

@@ -6,6 +6,7 @@ import Head from "next/head"
import { useRouter } from "next/router"
import AsyncButton from "../../components/AsyncButton"
import { CompilerPreset } from "../../components/compiler/CompilerOpts"
import { useCompilersForPlatform } from "../../components/compiler/compilers"
import PresetSelect, { PRESETS } from "../../components/compiler/PresetSelect"
import Editor from "../../components/Editor"
@@ -76,6 +77,11 @@ export default function NewScratch({ serverCompilers }: {
const [lineNumbers, setLineNumbers] = useState(false)
const setPreset = (preset: CompilerPreset) => {
setCompiler(preset.compiler)
setCompilerOpts(preset.opts)
}
// Load fields from localStorage
useEffect(() => {
try {
@@ -209,8 +215,7 @@ export default function NewScratch({ serverCompilers }: {
platform={platform}
compiler={compiler}
opts={compilerOpts}
setCompiler={setCompiler}
setOpts={setCompilerOpts}
setPreset={setPreset}
serverCompilers={serverCompilers.compilers}
/>
</div>