forked from libre-chip/grant-tracking
Compare commits
2 commits
c54a130dac
...
fbdcceaea2
Author | SHA1 | Date | |
---|---|---|---|
fbdcceaea2 | |||
d02476d925 |
4 changed files with 128 additions and 3 deletions
|
@ -15,7 +15,9 @@ jobs:
|
|||
- run: |
|
||||
apt-get update -qq
|
||||
apt-get install -qq \
|
||||
curl \
|
||||
default-jre-headless \
|
||||
jq \
|
||||
python3-venv
|
||||
- uses: https://git.libre-chip.org/mirrors/cache@v4
|
||||
with:
|
||||
|
|
|
@ -4,6 +4,8 @@ See Notices.txt for copyright information
|
|||
-->
|
||||
# NLnet 2024-12-324 Grant Progress
|
||||
|
||||
[Forgejo Project for this grant.](https://git.libre-chip.org/libre-chip/grant-tracking/projects/1)
|
||||
|
||||
# € 50000 Libre-Chip's First CPU Architecture And Formal Proof of No Spectre bugs
|
||||
|
||||
Modern computers suffer from a constant stream of new speculative-execution security flaws (Spectre-style bugs). To address this major category of flaws, we are working towards building a high-performance computer processor (CPU) with speculative execution and working on a mathematical proof that it doesn't suffer from any speculative-execution data leaks, thereby demonstrating that this major category of flaws can be eliminated without crippling the computer's performance.
|
||||
|
@ -14,7 +16,7 @@ https://en.wikipedia.org/wiki/Transient_execution_CPU_vulnerability#Timeline
|
|||
|
||||
This is for adding the code for translating Fayalite HDL to Rocq, as well as determining how exactly we'll describe HDL in Rocq. I expect the translation code to be of comparable size to the compiler portion of the simulator (the simulator is broken into three main parts, a compiler to an IR optimized for interpretation, the interpreter itself, and the code for reading/writing simulator I/O and handling time simulation), so somewhere around 5000 LoC.
|
||||
|
||||
- € 2000 [Issue #N](https://git.libre-chip.org/libre-chip/grant-tracking/issues/) Figure out how exactly we should represent HDL in Rocq, writing down a manually-translated version of common HDL components (e.g. how to translate a register, a memory, an add/sub/mul/div, etc.).
|
||||
- € 2000 [Issue #2](https://git.libre-chip.org/libre-chip/grant-tracking/issues/2) Figure out how exactly we should represent HDL in Rocq, writing down a manually-translated version of common HDL components (e.g. how to translate a register, a memory, an add/sub/mul/div, etc.).
|
||||
- € 4000 [Issue #N](https://git.libre-chip.org/libre-chip/grant-tracking/issues/) Write the code to do the translation in Fayalite.
|
||||
|
||||
## € 4000 Adding supporting code for generating FPGA bitstreams from Fayalite
|
||||
|
|
|
@ -4,6 +4,8 @@ See Notices.txt for copyright information
|
|||
-->
|
||||
# NLnet YYYY-MM-ID Grant Progress
|
||||
|
||||
[Forgejo Project for this grant.](https://git.libre-chip.org/libre-chip/grant-tracking/projects/ID)
|
||||
|
||||
# € 50000 Top-level Grant Name
|
||||
|
||||
Top-level Grant Description.
|
||||
|
|
|
@ -45,6 +45,96 @@ function check_amendment()
|
|||
python3 -m takentaal.takentaal amendment_v1_0 "$1"
|
||||
}
|
||||
|
||||
function matches_split_prefix() {
|
||||
local expected="$1" text="$2"
|
||||
shift 2
|
||||
local split_token text_prefix next_text_prefix
|
||||
for split_token in "$@"; do
|
||||
text_prefix="$text"
|
||||
until [[ -z "$text_prefix" ]]; do
|
||||
if [[ "$expected" = "$text_prefix" ]]; then
|
||||
return 0
|
||||
else
|
||||
next_text_prefix="${text_prefix%"$split_token"*}"
|
||||
if [[ "$text_prefix" = "$next_text_prefix" ]]; then
|
||||
break
|
||||
else
|
||||
text_prefix="$next_text_prefix"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
function issue_url() {
|
||||
local issue_number="$1"
|
||||
echo "https://git.libre-chip.org/libre-chip/grant-tracking/issues/$issue_number"
|
||||
}
|
||||
|
||||
function grant_url() {
|
||||
local nlnet_id="$1"
|
||||
if [[ "$nlnet_id" == "YYYY-MM-ID" ]]; then
|
||||
nlnet_id=template
|
||||
fi
|
||||
echo "https://git.libre-chip.org/libre-chip/grant-tracking/src/branch/master/nlnet-$nlnet_id/progress.md"
|
||||
}
|
||||
|
||||
function check_issue()
|
||||
(
|
||||
issue_number="$1"
|
||||
nlnet_id="$2"
|
||||
subtask_title="$3"
|
||||
subtask_body="$4"
|
||||
if [[ -z "$FORGEJO_TOKEN" ]]; then
|
||||
return
|
||||
fi
|
||||
example_title="NLnet $nlnet_id $subtask_title"
|
||||
body_prefix="Issue for tracking progress of a subtask of [NLnet grant $nlnet_id]($(grant_url "$nlnet_id")):
|
||||
$subtask_title
|
||||
$subtask_body
|
||||
"
|
||||
body_suffix="" # TODO
|
||||
example_body_middle=$'\n<!-- add additional content here if you like -->\n'
|
||||
function error() {
|
||||
# emit escape sequence for a hyperlink to the issue
|
||||
bar="---------------------------------------------------------------------------"
|
||||
body="$body_prefix"
|
||||
body_middle="${example_body_middle%$'\n'}"
|
||||
body+="${body_middle#$'\n'}"
|
||||
body+="$body_suffix"
|
||||
printf '\e]8;;%s\e\\Issue #%s\e]8;;\e\\: error: %s\nExample Issue:\nTitle: %s\nDescription:\n%s\n%s\n%s\n' \
|
||||
"$(issue_url "$issue_number")" "$issue_number" "$*" \
|
||||
"$example_title" "$bar" "$body" "$bar" >&2
|
||||
exit 1
|
||||
}
|
||||
issue_json="$(curl -sS "https://git.libre-chip.org/api/v1/repos/libre-chip/grant-tracking/issues/$issue_number" \
|
||||
-H "Accept: application/json" \
|
||||
-H "Authorization: token $FORGEJO_TOKEN")" || error "can't retrieve issue"
|
||||
issue_title="$(echo "$issue_json" | jq -r '.title')"
|
||||
issue_body="$(echo "$issue_json" | jq -r '.body')"
|
||||
[[ "$issue_title" =~ ^"NLnet $nlnet_id "(.*)$ ]] || error "title must start with \`NLnet $nlnet_id \`"
|
||||
issue_title_tail="${BASH_REMATCH[1]}"
|
||||
split_punct=(',' '-' ';' ':')
|
||||
matches_split_prefix "$issue_title_tail" "$subtask_title" "${split_punct[@]}" || \
|
||||
error "issue title must be \`NLnet $nlnet_id \` followed by the subtask title, or a prefix of the subtask title that ends right before one of:$(printf ' `%s`' "${split_punct[@]}")"
|
||||
if [[ "$issue_body" =~ ^"$body_prefix".*"$body_suffix"$ ]]; then
|
||||
: # all good
|
||||
elif [[ "$issue_body" =~ ^"$body_prefix"(.*)"$example_body_middle"(.*)$ || \
|
||||
"$issue_body" =~ ^"$body_prefix"(.*)()$ ]]; then
|
||||
example_body_middle="${BASH_REMATCH[1]}$example_body_middle${BASH_REMATCH[2]}"
|
||||
error "issue description is missing required suffix"
|
||||
elif [[ "$issue_body" =~ ^(.*)"$example_body_middle"(.*)"$body_suffix"$ || \
|
||||
"$issue_body" =~ ^(.*)()"$body_suffix"$ ]]; then
|
||||
example_body_middle="${BASH_REMATCH[1]}$example_body_middle${BASH_REMATCH[2]}"
|
||||
error "issue description is missing required prefix"
|
||||
elif [[ "$issue_body" =~ ^(.*)"$example_body_middle"(.*)$ || \
|
||||
"$issue_body" =~ ^(.*)()$ ]]; then
|
||||
example_body_middle="${BASH_REMATCH[1]}$example_body_middle${BASH_REMATCH[2]}"
|
||||
error "issue description is missing both the required prefix and suffix"
|
||||
fi
|
||||
)
|
||||
|
||||
function check_progress()
|
||||
(
|
||||
set -E
|
||||
|
@ -106,6 +196,15 @@ function check_progress()
|
|||
"^'# NLnet $nlnet_id Grant Progress'$" \
|
||||
"^$"
|
||||
|
||||
project_line_prefix='[Forgejo Project for this grant.](https://git.libre-chip.org/libre-chip/grant-tracking/projects/'
|
||||
if [[ "$nlnet_id" != "YYYY-MM-ID" ]]; then
|
||||
[[ "$line" =~ ^"$project_line_prefix"[0-9]+')'$ ]] || \
|
||||
nonfatal_error "expected: $project_line_prefix<the-project's-id>)"
|
||||
else
|
||||
[[ "$line" = "${project_line_prefix}ID)" ]] || \
|
||||
nonfatal_error "expected: ${project_line_prefix}ID)"
|
||||
fi
|
||||
|
||||
skip_until_item "top level grant header"
|
||||
[[ "$line" =~ ^"# € "([0-9]+)" "[^[:space:]] ]] || error "expected: # € <number> <grant name>"
|
||||
((grant_amount = ${BASH_REMATCH[1]}))
|
||||
|
@ -122,20 +221,40 @@ function check_progress()
|
|||
skip_until_item
|
||||
subtasks_total=0
|
||||
until ((eof)); do
|
||||
subtask_expected="expected: - € <number> [Issue #<N>](https://git.libre-chip.org/libre-chip/grant-tracking/issues/<N>) <subtask name>"
|
||||
subtask_expected="expected: - € <number> [Issue #<N>]($(issue_url "<N>")) <subtask name>"
|
||||
[[ "$line" =~ ^([#-]+)" € "([0-9]+)" "[^[:space:]] ]] || error "$subtask_expected"
|
||||
[[ "${BASH_REMATCH[1]}" =~ ^[^'#'] ]] || break
|
||||
[[ "$line" =~ ^"- € "([0-9]+)" [Issue #"([0-9]+|"N")"](https://git.libre-chip.org/libre-chip/grant-tracking/issues"('/'([0-9]*|"N"))?") "[^[:space:]] ]] || \
|
||||
[[ "$line" =~ ^"- € "([0-9]+)" [Issue #"([0-9]+|"N")"](https://git.libre-chip.org/libre-chip/grant-tracking/issues"('/'([0-9]*|"N"))?") "([^[:space:]].*)$ ]] || \
|
||||
error "$subtask_expected"
|
||||
((subtask_amount = ${BASH_REMATCH[1]}))
|
||||
((subtasks_total += subtask_amount))
|
||||
issue_number="${BASH_REMATCH[2]}"
|
||||
issue_number2="${BASH_REMATCH[4]}"
|
||||
subtask_title="${BASH_REMATCH[5]}"
|
||||
[[ "$issue_number" != "N" ]] || [[ "$nlnet_id" = "YYYY-MM-ID" ]] || nonfatal_error "issue number must be set"
|
||||
[[ ( "$issue_number" = "N" && -z "$issue_number2" ) || "$issue_number" = "$issue_number2" ]] || \
|
||||
nonfatal_error "issue number in link name must match issue number in url"
|
||||
((subtask_line_index = line_index))
|
||||
next_line
|
||||
skip_until_item
|
||||
subtask_body=""
|
||||
subtask_body_trailing_lines=""
|
||||
# trim leading and trailing blank lines
|
||||
for ((i = subtask_line_index + 1; i < line_index; i++)); do
|
||||
if [[ "${lines[i]}" =~ ^[[:space:]]*$ ]]; then
|
||||
subtask_body_trailing_lines+="${lines[i]}"$'\n'
|
||||
elif [[ -z "$subtask_body" ]]; then
|
||||
subtask_body+="${lines[i]}"$'\n'
|
||||
subtask_body_trailing_lines="" # ignore any leading blank lines
|
||||
else
|
||||
# add subtask_body_trailing_lines since they're lines in between non-blank lines
|
||||
subtask_body+="$subtask_body_trailing_lines${lines[i]}"$'\n'
|
||||
subtask_body_trailing_lines=""
|
||||
fi
|
||||
done
|
||||
if [[ "$issue_number2" =~ ^[0-9]+$ && "$nlnet_id" != "YYYY-MM-ID" && "$FORGEJO_TOKEN" ]]; then
|
||||
check_issue "$issue_number2" "$nlnet_id" "$subtask_title" "$subtask_body" || diag "note:" -line_index="$subtask_line_index" "issue is linked from here"
|
||||
fi
|
||||
done
|
||||
(( subtasks_total == task_amount )) || \
|
||||
nonfatal_error -line_index="$task_line_index" "task's amount ($task_amount) doesn't match sum of subtasks' amounts ($subtasks_total)"
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue