Skip to content
代码片段 群组 项目
提交 fd5448ef 编辑于 作者: Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets 提交者: Peter Leitzen
浏览文件

Add support for /file_hooks directory


Use /file_hooks directory for File Hooks to be in
sync with feature name.

Signed-off-by: default avatarDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
上级 93d29d34
No related branches found
No related tags found
无相关合并请求
...@@ -38,3 +38,4 @@ exclude_paths: ...@@ -38,3 +38,4 @@ exclude_paths:
- backups/ - backups/
- coverage-javascript/ - coverage-javascript/
- plugins/ - plugins/
- file_hooks/
...@@ -25,6 +25,7 @@ AllCops: ...@@ -25,6 +25,7 @@ AllCops:
- 'generator_templates/**/*' - 'generator_templates/**/*'
- 'builds/**/*' - 'builds/**/*'
- 'plugins/**/*' - 'plugins/**/*'
- 'file_hooks/**/*'
CacheRootDirectory: tmp CacheRootDirectory: tmp
Cop/StaticTranslationDefinition: Cop/StaticTranslationDefinition:
......
---
title: Add support for /file_hooks directory
merge_request: 29675
author:
type: changed
...@@ -23,22 +23,22 @@ see the [system hooks] documentation. ...@@ -23,22 +23,22 @@ see the [system hooks] documentation.
## Setup ## Setup
The file hooks must be placed directly into the `plugins` directory, subdirectories The file hooks must be placed directly into the `file_hooks` directory, subdirectories
will be ignored. There is an will be ignored. There is an
[`example` directory inside `plugins`](https://gitlab.com/gitlab-org/gitlab/tree/master/plugins/examples) [`example` directory inside `file_hooks`](https://gitlab.com/gitlab-org/gitlab/tree/master/file_hooks/examples)
where you can find some basic examples. where you can find some basic examples.
Follow the steps below to set up a custom hook: Follow the steps below to set up a custom hook:
1. On the GitLab server, navigate to the plugin directory. 1. On the GitLab server, navigate to the plugin directory.
For an installation from source the path is usually For an installation from source the path is usually
`/home/git/gitlab/plugins/`. For Omnibus installs the path is `/home/git/gitlab/file_hooks/`. For Omnibus installs the path is
usually `/opt/gitlab/embedded/service/gitlab-rails/plugins`. usually `/opt/gitlab/embedded/service/gitlab-rails/file_hooks`.
For [highly available] configurations, your hook file should exist on each For [highly available] configurations, your hook file should exist on each
application server. application server.
1. Inside the `plugins` directory, create a file with a name of your choice, 1. Inside the `file_hooks` directory, create a file with a name of your choice,
without spaces or special characters. without spaces or special characters.
1. Make the hook file executable and make sure it's owned by the Git user. 1. Make the hook file executable and make sure it's owned by the Git user.
1. Write the code to make the file hook function as expected. That can be 1. Write the code to make the file hook function as expected. That can be
...@@ -106,9 +106,9 @@ bundle exec rake file_hooks:validate RAILS_ENV=production ...@@ -106,9 +106,9 @@ bundle exec rake file_hooks:validate RAILS_ENV=production
Example of output: Example of output:
```plaintext ```plaintext
Validating file hooks from /plugins directory Validating file hooks from /file_hooks directory
* /home/git/gitlab/plugins/save_to_file.clj succeed (zero exit code) * /home/git/gitlab/file_hooks/save_to_file.clj succeed (zero exit code)
* /home/git/gitlab/plugins/save_to_file.rb failure (non-zero exit code) * /home/git/gitlab/file_hooks/save_to_file.rb failure (non-zero exit code)
``` ```
[system hooks]: ../system_hooks/system_hooks.md [system hooks]: ../system_hooks/system_hooks.md
......
*
!*/
!.gitignore
!.gitkeep
!examples/*
...@@ -3,16 +3,17 @@ ...@@ -3,16 +3,17 @@
module Gitlab module Gitlab
module FileHook module FileHook
def self.any? def self.any?
plugin_glob.any? { |entry| File.file?(entry) } dir_glob.any? { |entry| File.file?(entry) }
end end
def self.files def self.files
plugin_glob.select { |entry| File.file?(entry) } dir_glob.select { |entry| File.file?(entry) }
end end
def self.plugin_glob def self.dir_glob
Dir.glob(Rails.root.join('plugins/*')) Dir.glob([Rails.root.join('file_hooks/*'), Rails.root.join('plugins/*')])
end end
private_class_method :dir_glob
def self.execute_all_async(data) def self.execute_all_async(data)
args = files.map { |file| [file, data] } args = files.map { |file| [file, data] }
......
namespace :file_hooks do namespace :file_hooks do
desc 'Validate existing plugins' desc 'Validate existing file hooks'
task validate: :environment do task validate: :environment do
puts 'Validating file hooks from /plugins directory' puts 'Validating file hooks from /file_hooks and /plugins directories'
Gitlab::FileHook.files.each do |file| Gitlab::FileHook.files.each do |file|
success, message = Gitlab::FileHook.execute(file, Gitlab::DataBuilder::Push::SAMPLE_DATA) success, message = Gitlab::FileHook.execute(file, Gitlab::DataBuilder::Push::SAMPLE_DATA)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
require 'spec_helper' require 'spec_helper'
describe Gitlab::FileHook do describe Gitlab::FileHook do
let(:file_hook) { Rails.root.join('plugins', 'test.rb') } let(:file_hook) { Rails.root.join('file_hooks', 'test.rb') }
let(:tmp_file) { Tempfile.new('file_hook-dump') } let(:tmp_file) { Tempfile.new('file_hook-dump') }
let(:file_hook_source) do let(:file_hook_source) do
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册