13 Commits

Author SHA1 Message Date
Márton Lente
1907fc951a Fix: Template nav global icon dropdown toggle
Change to inline SVG dropdown icon in navbar since project doesn't use Web
Assets' icon set.
Part of #9
2025-02-03 18:13:13 +01:00
Márton Lente
952b59ccc0 Chore: Update templawte nav-global markup to web-assets latest
Part of #9
2025-02-03 16:18:15 +01:00
Márton Lente
8103dc5aec Fix: Cleanup remove nav-global unused subcomponents list items
Part of #9
2024-12-02 11:11:25 +01:00
Márton Lente
8e97fa7d45 Chore: Add style web-assets todo
Part of #9
2024-12-02 10:42:42 +01:00
Márton Lente
844367b17f Fix: Replace nav-global nav btn chevron for small screens
Replace nav-global nav button's chevron icon from fontutti reference to inline
SVG, as fontutti is not present in the project.
Part of #9
2024-12-02 10:26:03 +01:00
Márton Lente
cbcd09fc69 Fix: Cleanup remove nav-global unused subcomponents
Part of #9
2024-12-02 10:22:50 +01:00
Márton Lente
0e09625d98 Merge branch 'main' into ui/web-assets-v2-nav-global 2024-11-29 14:37:31 +01:00
Márton Lente
393f30f9ac UI: Upgrade nav-global to latest web-assets v2 component v2.0.0-beta
Part of #9
2024-11-29 14:31:41 +01:00
Márton Lente
345c549da2 UI: Remove nav-global custom font Inter from font-stack
Remove nav-global custom non-system font Inter from font-stack until Inter is not loaded for the entire UI.
Part of #9
2024-08-19 12:47:39 +02:00
Márton Lente
d8f5e43cc2 Fix: Template custom component nav-global extra whitespace 2024-08-19 12:36:46 +02:00
Márton Lente
b47ddab672 Refactor: Cleanup and move web-assets navbar-global styles to markup script tag
Move web-assets navbar-global styles to markup script tag, accordingly
to component and web-assets instructions, to improve the component's
portability.
Part of #9
2024-08-19 12:30:19 +02:00
Márton Lente
db38fd6bbf Fix: Post nav-global web-assets v2 component upgrade dropdown small screens
Fix nav-global web-assets v2 component display issues on small screens after
markup and style updates.
Part of #9
2024-08-16 15:32:27 +02:00
Márton Lente
8532b5654e UI: Upgrade nav-global to web-assets v2 component
Upgrade nav-global markup and styles to web-assets v2's pre-compiled
nav-global component to improve visual consistency with other sites.
2024-08-16 14:44:26 +02:00
26 changed files with 21 additions and 844 deletions

View File

@@ -1,5 +0,0 @@
${CommitTitle}
${CommitBody}
Pull Request: https://projects.blender.org/infrastructure/blender-devops/pulls/${PullRequestIndex}

View File

@@ -1,3 +0,0 @@
${PullRequestTitle}
Pull Request: https://projects.blender.org/infrastructure/blender-devops/pulls/${PullRequestIndex}

View File

@@ -1 +0,0 @@
test/**/tmp

View File

@@ -1,41 +0,0 @@
# Git Hooks
## Reject Merge Commits
The `blender_merged_hook` script rejects merge commits to branches were we don't want them. It is installed as an `pre-receive` hook in the following repositories:
- `blender/blender`
- `blender/blender-addons`
- `blender/blender-addons-contrib`
- `blender/blender-assets`
- `blender/blender-benchmarks`
- `blender/blender-developer-docs`
- `blender/blender-manual`
- `blender/blender-test-data`
- `blender/lib-linux_x64`
- `blender/lib-macos_arm64`
- `blender/lib-macos_x64`
- `blender/lib-source`
- `blender/lib-windows_arm64`
- `blender/lib-windows_x64`
- `brecht/test-hooks`
## Deny Binary Files
The `deny-binary` script rejects commit that add binary files that should have been tracked as Git LFS object instead. We also provide some tests, which can be run using Docker Compose inside our Gitea container image. It has been installed as a `pre-receive` hook in the following repositories:
- `blender/blender`
- `blender/blender-assets`
- `blender/blender-benchmarks`
- `blender/blender-developer-docs`
- `blender/blender-manual`
- `blender/blender-test-data`
- `blender/lib-linux_x64`
- `blender/lib-macos_arm64`
- `blender/lib-macos_x64`
- `blender/lib-source`
- `blender/lib-windows_arm64`
- `blender/lib-windows_x64`
- `studio/dogwalk`
To circumvent the rejection you can add `override restrictions` anywhere in the commit message.

View File

@@ -1,116 +0,0 @@
#!/bin/bash -eu
#
# Blender: modified version of update.sample in hooks directory to:
# - Deny merge commits to release branches
# - Deny merge of non-release branches to main
#
# This indirectly checks for accidentally merging main into release
# branches, as main is almost certain to contain merge commits not
# in the release branch.
#
# To enable this hook, rename this file to "pre-receive" or place it in
# an "pre-receive.d" folder.
# No revision indicator.
zero_revision="0000000000000000000000000000000000000000"
# Check if we need to verify merge commits for this branch.
need_verify_merge_commit()
{
local branch="$1"
local old_revision="$2"
if [ "$old_revision" = "$zero_revision" ]; then
# New branch, always ok to push.
false
elif [ "$branch" = "main" ]; then
# Some merge commits allowed in main branch.
true
elif (echo "${branch}" | grep -Eq ^blender-v[0-9]\.[0-9][0-9]?-release$); then
# No merge commits in release branch.
true
else
false
fi
}
# Check if this is an invalid merge commit.
is_invalid_merge_commit()
{
local branch="$1"
local revision="$2"
# Detect if this revision is a merge commit. It's based on the commit merge
# message which is weak, but not clear how to do it otherwise.
if git show -s --format=%B ${revision} | grep -Eq "Merge (remote-tracking )?branch '"; then
if (echo "${branch}" | grep -Eq ^blender-v[0-9]\.[0-9][0-9]?-release$); then
# In release branch, all merge commits are invalid.
true
elif [ "$branch" = "main" ]; then
# In main branch, only merge commits from release branches.
if git show -s --format=%B ${revision} | grep -Eq "Merge (remote-tracking )?branch '(origin\/)?blender-v[0-9]\.[0-9][0-9]?-release'"; then
false
else
true
fi
else
false
fi
else
false
fi
}
# Read stdin for ref information.
while read oldrev newrev refname; do
# Detect type of update.
if [ "$newrev" = "$zero_revision" ]; then
newrev_type=delete
else
newrev_type=$(git cat-file -t $newrev)
fi
case "$refname","$newrev_type" in
refs/tags/*,commit)
# un-annotated tag
;;
refs/tags/*,delete)
# delete tag
;;
refs/tags/*,tag)
# annotated tag
;;
refs/heads/*,commit)
# branch
branch=${refname##refs/heads/}
if need_verify_merge_commit "$branch" "$oldrev"; then
for r in $(test "$oldrev" = $zero_revision \
&& git rev-list $newrev \
|| git rev-list $newrev ^$oldrev); do
is_invalid_merge_commit ${branch} ${r} && {
printf "error: *** %s\n" \
"You may only merge release branches into main, no other merge commits are allowed." \
"See Blender's release branch developer documentation for details." >&2
exit 1
}
done
fi
;;
refs/heads/*,delete)
# delete branch
;;
refs/remotes/*,commit)
# tracking branch
;;
refs/remotes/*,delete)
# delete tracking branch
;;
*)
# Anything else (is there anything else?)
;;
esac
done
exit 0

View File

@@ -1,94 +0,0 @@
#!/bin/bash -eu
#
# Reject commits with binary files, which should have used LFS instead. Allow
# overriding when "override restrictions" is in the commit message.
#
# To enable this hook, rename this file to "pre-receive" or place it in
# a "pre-receive.d" folder.
# Use 'strict mode': http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -o pipefail
nullsha="0000000000000000000000000000000000000000"
status=0
# This is the message to include in your commit to override.
commit_override_msg="override restrictions"
handle_pipefails() {
# ignore exit code 141 from simple command pipes
# - use with: cmd1 | cmd2 || handle_pipefails $?
(( $1 == 141 )) && return 0
return $1
}
# Read stdin for ref information.
while read oldrev newrev refname; do
# Skip branch deletions.
if [ "$newrev" = "$nullsha" ]; then
continue
fi
# Set oldrev to HEAD if this is branch creation.
if [ "$oldrev" = "$nullsha" ]; then
oldrev="HEAD"
fi
# Check for branches and tags, but not pull requests in refs/pull. Otherwise Gitea
# fails to create a pull request without explaining why.
if [[ "$refname" == refs/heads/* ]]; then
:
elif [[ "$refname" == refs/tags/* ]]; then
:
else
exit 0
fi
# Loop over each commit.
for commit in $(git rev-list --objects ${oldrev}..${newrev} |
git cat-file --batch-check='%(objectname) %(objecttype) %(objectsize) %(rest)' | grep commit | awk '{print $1}'); do
# Get list of potentially binary files in this commit
mapfile -t binary_files < <(git log --diff-filter=d --pretty=format:%H -M100% --numstat ${commit}^! | grep -e "- - \w" | awk '{print $3}')
if [ ${#binary_files[@]} -eq 0 ]; then
continue
fi
# Check for override message
override=0
if git log --pretty=format:%B ${commit}^! | grep -qi "${commit_override_msg}"; then
override=1
fi
rejected_files=()
for file in "${binary_files[@]}"; do
# Check if it's an LFS pointer
# Use handle_pipefails as we may run into SIGPIPE error code
if git show "${commit}:${file}" | git lfs pointer --check --stdin || handle_pipefails $?; then
continue
fi
rejected_files+=("$file")
done
if [ ${#rejected_files[@]} -gt 0 ]; then
if [ "$override" -gt 0 ]; then
echo "Your push contains binary files but was accepted because of override commit message:"
else
status=1
echo "Your push was rejected because it contains binary files not tracked by Git LFS:"
fi
echo "Commit: $commit"
for file in "${rejected_files[@]}"; do
echo "File: $file"
done
fi
done
done
if [ "$status" -ne "0" ]; then
echo
echo "You must make sure that the binary files are tracked with Git LFS or seek help from the repo administrators."
echo "(Perhaps you did not setup Git LFS with 'git lfs install'?)"
echo
fi
exit $status

View File

@@ -1,9 +0,0 @@
services:
gitea_deny_binary_tests:
image: ghcr.io/blender/gitea:v1.25.2
container_name: gitea_deny_binary_tests
working_dir: /workspace
command: bash -c "./test/run_deny_binary_tests.sh"
volumes:
- ./:/workspace
user: root

View File

@@ -1,17 +0,0 @@
#!/bin/sh
REPO_PATH=$(pwd)
REPO_NAME=$(basename "$REPO_PATH" .git)
ORG_NAME=$(basename "$(dirname "$REPO_PATH")")
NEW_SERVER="git.blender.org"
echo ""
echo "*********************************************************************************"
echo "* IMPORTANT NOTICE *"
echo "* Blender Projects is moving its Git SSH domain to git.blender.org! *"
echo "* If you haven't already, please update your Git remote to use the *"
echo "* git@git.blender.org host instead of the git@projects.blender.org one. *"
echo "* *"
echo "* More information: https://devtalk.blender.org/t/-/41098 *"
echo "*********************************************************************************"
echo ""

View File

@@ -1,45 +0,0 @@
# Run single test provided via $1.
# Prints "ok" on success, "FAIL" on failure, and returns the appropriate status code.
run_test() {
local TEST_SCRIPT=$1
printf '%s' "Running $(basename "${TEST_SCRIPT}")... "
# Run test silently.
# Return 0 on success, 1 on failure.
if "${TEST_SCRIPT}" > /dev/null 2>&1; then
echo "ok"
return 0
else
echo "FAIL"
return 1
fi
}
# Run all tests in the given directory (specified as $1).
# All .sh tests are executed in sorted order.
# The script reports how many tests failed and exits with non-zero status if any did.
run_tests_in_directory() {
local DIR=$1
local failed=0
echo "== Running tests in directory $(basename "${DIR}") =="
# Iterate over all .sh files and run them one by one.
for test_script in $(ls "${DIR}" | sort); do
case "${test_script}" in
*.sh)
if ! run_test "${DIR}/${test_script}"; then
failed=$((failed + 1))
fi
;;
esac
done
# After running all tests, report overall result.
if [ "$failed" -ne 0 ]; then
echo "$failed test(s) failed."
exit 1
else
echo "All tests passed."
fi
}

View File

@@ -1,31 +0,0 @@
#!/bin/sh
# Test: create text file in the empty repository and try to push it.
#
# It is expected to pass as it is perfectly nomial usage of Git for text
# based files.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,38 +0,0 @@
#!/bin/sh
# Test: add text file to the existing repository and try to push it.
#
# It is expected to pass as it is perfectly nomial usage of Git for text
# based files.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo "Hello, World!" > "${WORK_GIT_DIR}/NOTES.txt"
git -C "${WORK_GIT_DIR}" add NOTES.txt
git -C "${WORK_GIT_DIR}" commit --message "Add file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,32 +0,0 @@
#!/bin/sh
# Test: Add binary file to an empty repository and try to push.
#
# It is expected to pass as part of a logic which allows to branch off
# existing branches where it is possible to have binary files that were
# added prior to migration to Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,38 +0,0 @@
#!/bin/sh
# Test: add binary file to the existing repository and try to push it.
#
# This test is expected to fail as new binary files are expected to be
# using Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,41 +0,0 @@
#!/bin/sh
# Test: add binary file that starts with Git LFS reference content.
#
# This test is expected to fail as it is actually a binary file.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo "version https://git-lfs.github.com/spec/v1" > "${WORK_GIT_DIR}/data.bin"
echo "oid sha256:c35020473aed1b4642cd726cad727b63fff2824ad68cedd7ffb73c7cbd890479" >> "${WORK_GIT_DIR}/data.bin"
echo "size 32768" >> "${WORK_GIT_DIR}/data.bin"
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k oflag=append conv=notrunc
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,46 +0,0 @@
#!/bin/sh
# Test: add binary file to the existing repository with proper LFS filters
# installed prior to adding a binary file.
#
# This test is expected to pass as it is an expected usage of Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,47 +0,0 @@
#!/bin/sh
# Test: add binary file to the existing repository before LFS filters is
# configured, configure filter, and convert to LFS.
#
# This test is expected to fail as all new files after adding filter are
# supposed to be covered by Git LFS.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
git -C "${WORK_GIT_DIR}" lfs migrate import --no-rewrite --yes data.bin
if git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,53 +0,0 @@
#!/bin/sh
# Test: Add filter and convert binary file to LFS on an existing repository.
#
# This test is expected to pass since it is perfectly nominal operation to do
# when dealing with legacy code base where binary files were added before LFS
# was configured, and when conversion is needed after the install of the deny
# hook.
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. ${SCRIPT_PATH}/functions
setup_temp_git_identity
ORIGIN_REPO_DIR=`setup_bare_origin_repository`
WORK_GIT_DIR=`clone_repository "${ORIGIN_REPO_DIR}"`
echo "Hello, World!" > "${WORK_GIT_DIR}/README.txt"
git -C "${WORK_GIT_DIR}" add README.txt
git -C "${WORK_GIT_DIR}" commit --message "Initial commit"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
dd if=/dev/zero of="${WORK_GIT_DIR}/data.bin" bs=1 count=32k
git -C "${WORK_GIT_DIR}" add data.bin
git -C "${WORK_GIT_DIR}" commit --message "Add binary file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
install_hook "${ORIGIN_REPO_DIR}" "${SCRIPT_PATH}/../../deny-binary" "pre-receive"
git -C "${WORK_GIT_DIR}" lfs install
git -C "${WORK_GIT_DIR}" lfs track "*.bin"
git -C "${WORK_GIT_DIR}" add .gitattributes
git -C "${WORK_GIT_DIR}" commit --message "Track .bin files with Git LFS"
git -C "${WORK_GIT_DIR}" lfs migrate import --no-rewrite --yes data.bin
git -C "${WORK_GIT_DIR}" reset --soft HEAD~1
git -C "${WORK_GIT_DIR}" commit --amend --message "Track .bin files with Git LFS and convert existing file"
if ! git -C "${WORK_GIT_DIR}" push; then
exit 1
fi
echo
echo "Test passed!"
exit 0

View File

@@ -1,47 +0,0 @@
# Set up temp Git identity if none is set
setup_temp_git_identity() {
export GIT_AUTHOR_NAME="Test User"
export GIT_AUTHOR_EMAIL="tests@example.com"
export GIT_COMMITTER_NAME="Test User"
export GIT_COMMITTER_EMAIL="tests@example.com"
}
# Get temporary directory where test data will be generated.
# The function echo's the directory.
get_tmp_dir() {
local SCRIPT=$(readlink -f "$0")
local SCRIPT_PATH=$(dirname "$SCRIPT")
echo "$(dirname ${0})/tmp/$(basename "${SCRIPT%.*}")"
}
# Setup bare repository which could be used as a server-side upstream.
# The function echo's the path to the repository.
setup_bare_origin_repository() {
local TMP_DIR=`get_tmp_dir`
local REPO_DIR="${TMP_DIR}/origin/test-repo.git"
rm -rf "${REPO_DIR}"
mkdir -p "${REPO_DIR}"
git -C "${REPO_DIR}" init --bare --initial-branch=main > /dev/null 2>&1
echo "${REPO_DIR}"
}
# Install hook to the given bare repository.
# The bare git repository is provided as $1, hook script is provided as $2,
# and the hook name is provided as $3.
install_hook() {
local GIT_DIR="${1}"
local HOOK_SCRIPT="${2}"
local HOOK_NAME="${3}"
cp "${HOOK_SCRIPT}" "${GIT_DIR}/hooks/${HOOK_NAME}"
}
# Clone repository provided via $1. The path to the working directory is
# echo'd.
clone_repository() {
local TMP_DIR=`get_tmp_dir`
local WORK_GIT_DIR="${TMP_DIR}/checkout/test-repo"
rm -rf "${WORK_GIT_DIR}"
git clone "${1}" "${WORK_GIT_DIR}" > /dev/null 2>&1
echo "${WORK_GIT_DIR}"
}

View File

@@ -1,10 +0,0 @@
#!/bin/sh
set -e
SCRIPT=$(readlink -f "$0")
SCRIPT_PATH=$(dirname "$SCRIPT")
. "${SCRIPT_PATH}/common/functions"
run_tests_in_directory "${SCRIPT_PATH}/deny_binary"

View File

@@ -158,7 +158,7 @@
--color-active: hsla(213, 18%, 90%, .1); --color-active: hsla(213, 18%, 90%, .1);
--color-menu: hsl(213, 12%, 21%); --color-menu: hsl(213, 12%, 21%);
--color-card: #202327; --color-card: transparent;
--color-markup-table-row: hsla(0, 0%, 100%, 0); --color-markup-table-row: hsla(0, 0%, 100%, 0);
--color-markup-code-block: hsla(0, 0%, 100%, 0.1); --color-markup-code-block: hsla(0, 0%, 100%, 0.1);
@@ -214,9 +214,6 @@
--color-footer: hsl(213, 14.8%, 21%); --color-footer: hsl(213, 14.8%, 21%);
--color-footer-text: var(--color-text-light-3); --color-footer-text: var(--color-text-light-3);
--color-footer-links: var(--color-text-light-1); --color-footer-links: var(--color-text-light-1);
/* Color aliases. */
--color-accent: var(--color-primary);
} }
/* Custom styling of individual elements. /* Custom styling of individual elements.
@@ -520,17 +517,3 @@ a.ui.primary.label:hover,
.CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error { .CodeMirror.cm-s-default .cm-error, .CodeMirror.cm-s-paper .cm-error {
color: #dbdbeb; color: #dbdbeb;
} }
/* Progress bar. */
progress::-moz-progress-bar,
progress::-webkit-progress-value {
background-color: var(--color-primary);
}
.issue-list-toolbar-left a.item {
opacity: 50%;
}
.issue-list-toolbar-left a.active.item {
opacity: 100%;
}

View File

@@ -11,7 +11,7 @@
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a></li>
<li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms & Builds">Platforms & Builds</a></li> <li><a href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms, Builds, Tests & Devices">Platforms, Builds, Tests & Devices</a></li>
<li> <li>
Python & Add-ons Python & Add-ons
<ul> <ul>

View File

@@ -30,79 +30,35 @@
<tbody> <tbody>
<tr> <tr>
<td> <td>
<a href="{{AppSubUrl}}/studio/flamenco/issues/104437">Blender Asset Tracer</a> <a href="{{AppSubUrl}}/blender/blender/projects/30">Brush Assets</a>
</td> </td>
<td> <td>
BAT version 2 for Flamenco Unified, flexible brush management.
</td> </td>
<td> <td>
<a href="{{AppSubUrl}}/studio/flamenco/issues/104437">Under Development</a> <a href="https://devtalk.blender.org/t/brush-assets-prototype-feedback/33568">Feedback Wanted</a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a href="{{AppSubUrl}}/blender/blender/issues/141609">Hair Dynamics</a> <a href="https://projects.blender.org/blender/blender/projects/6">Grease Pencil v3</a>
</td> </td>
<td> <td>
High quality hair dynamics modifier. Improved workflows for 2D design and animation.
</td> </td>
<td> <td>
<a href="{{AppSubUrl}}/blender/blender/issues/141609">Under Development</a> <a href="https://projects.blender.org/blender/blender/projects/6">Under Development</a>
</td> </td>
</tr> </tr>
<tr> <tr>
<td> <td>
<a href="{{AppSubUrl}}/blender/blender/issues/153880">Modeling: Looptools</a> <a href="https://developer.blender.org/docs/features/animation/animation_system/baklava/">Layered Animation</a>
</td> </td>
<td> <td>
Porting Looptools into core Blender. Part of the new animation system roadmap.
</td> </td>
<td> <td>
<a href="{{AppSubUrl}}/blender/blender/issues/153880">Under Development</a> <a href="https://devtalk.blender.org/tag/animation-rigging">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/133001">Project Setup</a>
</td>
<td>
Shared "project" environment for different blend-files.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/133001">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/134495">Remote Asset Libraries</a>
</td>
<td>
Add support for online / remote hosted asset libraries.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/projects/707">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141089">VR Location Scouting</a>
</td>
<td>
Support blocking camera vantage points while immersed in VR (Virtual Reality)
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/141089">Under Development</a>
</td>
</tr>
<tr>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/148059">VSE: Compositor Modifier</a>
</td>
<td>
Implement a compositor modifier in the Video Sequencer.
</td>
<td>
<a href="{{AppSubUrl}}/blender/blender/issues/148059">Under Development</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View File

@@ -6,21 +6,21 @@
<div class="description"> <div class="description">
<ul> <ul>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/33">Blender 5.2 LTS</a> <a href="{{AppSubUrl}}/blender/blender/milestone/24">Blender 4.4</a>
— <strong>Alpha</strong>: New features and changes — <strong>Alpha</strong>: New features and changes
</li> </li>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/32">Blender 5.1</a> <a href="{{AppSubUrl}}/blender/blender/milestone/21">Blender 4.3</a>
— Released March 17, 2026 — Released Nov 19, 2024
</li>
<li>
<a href="{{AppSubUrl}}/blender/blender/milestone/25">Blender 4.5 LTS</a>
— Released July 15, 2025
</li> </li>
<li> <li>
<a href="{{AppSubUrl}}/blender/blender/milestone/19">Blender 4.2 LTS</a> <a href="{{AppSubUrl}}/blender/blender/milestone/19">Blender 4.2 LTS</a>
— Released Jul 16, 2024 — Released Jul 16, 2024
</li> </li>
<li>
<a href="{{AppSubUrl}}/blender/blender/milestone/5">Blender 3.6 LTS</a>
— Released Jun 27, 2023
</li>
</ul> </ul>
</div> </div>
</div> </div>

View File

@@ -562,7 +562,7 @@
<ul class="nav-global-nav-links nav-global-dropdown" id="nav-global-nav-links"> <ul class="nav-global-nav-links nav-global-dropdown" id="nav-global-nav-links">
<li> <li>
<a href="/" class="is-active">Projects</a> <a href="https://projects.blender.org" class="is-active">Projects</a>
</li> </li>
<li> <li>
<a href="https://developer.blender.org/docs/">Docs</a> <a href="https://developer.blender.org/docs/">Docs</a>

View File

@@ -25,7 +25,7 @@
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Modeling">Modeling</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Nodes & Physics">Nodes & Physics</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Pipeline & I/O">Pipeline & I/O</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms & Builds">Platforms & Builds</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Platforms, Builds, Tests & Devices">Platforms, Builds, Tests & Devices</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Python API & Text Editor">Python API & Text Editor</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Python API & Text Editor">Python API & Text Editor</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Sculpt, Paint & Texture">Sculpt, Paint & Texture</a>
<a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Triaging">Triaging</a> <a class="item" href="{{AppSubUrl}}/blender/blender/wiki/Module: Triaging">Triaging</a>
@@ -39,5 +39,4 @@
</div> </div>
</div> </div>
<a class="item hide-on-mid" href="{{AppSubUrl}}/blender/blender/issues/new?template=.gitea%2fissue_template%2fbug.yaml">Report a Bug</a> <a class="item" href="{{AppSubUrl}}/blender/blender/issues/new?template=.gitea%2fissue_template%2fbug.yaml">Report a Bug</a>
<a class="item hide-on-mid" href="{{AppSubUrl}}/paste/">Paste Code</a>

View File

@@ -29,12 +29,6 @@
border-radius: 50%; border-radius: 50%;
} }
/* Emoji. */
.markup .emoji {
margin-right: .075em;
vertical-align: -.075em;
}
/* Hide the app logo (first link in "brand" div). */ /* Hide the app logo (first link in "brand" div). */
.following.bar #navbar .brand > a:first-child { .following.bar #navbar .brand > a:first-child {
display: none; display: none;
@@ -45,13 +39,6 @@
color: var(--color-text-light-3); color: var(--color-text-light-3);
} }
/* Markup. */
/* Slight highlight on strong and heading elements, to improve readability. */
.markup strong,
.markup h1, .markup h2, .markup h3, .markup h4, .markup h5, .markup h6 {
color: var(--color-text-dark);
}
/* Homepage. */ /* Homepage. */
/* By default Gitea colors links green */ /* By default Gitea colors links green */
.home a { .home a {
@@ -70,12 +57,6 @@
display: none; display: none;
} }
@media (max-width: 1000px) {
.hide-on-mid {
display: none !important;
}
}
/* Repository page. */ /* Repository page. */
.repository .file-view.markdown a { .repository .file-view.markdown a {
color: var(--color-primary); color: var(--color-primary);
@@ -187,34 +168,6 @@
strong.attention-caution, span.attention-caution { strong.attention-caution, span.attention-caution {
color: var(--color-red-dark-1); color: var(--color-red-dark-1);
} }
/* Make Navbar dropdown item left-aligned. Needed from Chromium v133.x. */
#navbar .dropdown .item {
justify-content: flex-start;
}
/* User badges */
.user-badges {
/* Some rules override Gitea defaults. */
display: flex;
flex-wrap: wrap;
justify-content: center;
gap: 16px; /* --spacer */
padding: 0;
width: 100%;
}
.user-badges li {
list-style: none;
}
form[action="/blender/blender/issues/new"] {
--min-height-textarea: 300px;
}
form[action="/blender/blender/issues/new"] .combo-markdown-editor textarea.markdown-text-editor {
max-height: calc(100vh - 132px) !important;
}
</style> </style>
<script defer data-domain="projects.blender.org" src="https://analytics.blender.org/js/script.js"></script> <script defer data-domain="projects.blender.org" src="https://analytics.blender.org/js/script.js"></script>