RMT adalah alat yang berguna untuk membantu merilis versi baru dari perangkat lunak Anda. Anda dapat mendefinisikan jenis generator versi yang ingin Anda gunakan (misalnya versi semantik), di mana Anda ingin menyimpan versi (misalnya dalam file changelog atau sebagai tag VCS) dan daftar tindakan yang harus dieksekusi sebelum atau sesudah rilis versi baru.
Untuk menggunakan RMT dalam proyek Anda, Anda harus menggunakan komposer untuk menginstalnya sebagai ketergantungan dev. Pergi saja ke direktori root proyek Anda dan jalankan:
composer require --dev liip/rmt
Maka Anda harus menginisialisasi RMT dengan menjalankan perintah berikut:
php vendor/liip/rmt/command.php init
Perintah ini akan membuat file konfigurasi .rmt.yml
dan skrip RMT
yang dapat dieksekusi di folder root proyek Anda. Anda sekarang dapat mulai menggunakan RMT dengan mengeksekusi:
./RMT
Sesampai di sana, opsi terbaik Anda adalah memilih salah satu contoh konfigurasi di bawah ini dan menyesuaikannya dengan kebutuhan Anda.
Jika Anda menggunakan alat versi, kami sarankan untuk menambahkan kedua file komposer ( composer.json
dan composer.lock
), file konfigurasi RMT ( .rmt.yml
) dan skrip RMT
yang dapat dieksekusi ke sana. Direktori vendor
harus diabaikan karena diisi saat menjalankan composer install
.
Anda dapat menambahkan RMT ke komposer global Anda dan menyediakannya secara global untuk semua proyek Anda. Untuk hanya menjalankan perintah berikut:
composer global require liip/rmt
Pastikan Anda memiliki ~/.composer/vendor/bin/
di jalur $ Anda.
RMT dapat dipasang melalui phar-komposer, yang perlu dipasang. Alat yang berguna ini memungkinkan Anda untuk membuat file Phar yang dapat dikelola dari paket komposer.
Jika Anda memiliki pemasangan phar-komposer, Anda dapat menjalankan:
sudo phar-composer install liip/RMT
dan mintalah phar-komposer membangun dan menginstal file phar ke $ path Anda, yang kemudian memungkinkan Anda untuk menjalankannya hanya sebagai rmt
dari baris perintah atau Anda dapat menjalankan
phar-composer build liip/RMT
dan salin file phar yang dihasilkan secara manual ke tempat Anda membutuhkannya (baik membuat file phar dapat dieksekusi melalui chmod +x rmt.phar
dan menjalankannya secara langsung ./rmt.phar
atau jalankan dengan memohon melalui PHP melalui php rmt.phar
.
Untuk RMT pengganti penggunaan dengan varian apa pun yang telah Anda putuskan untuk digunakan.
Jika Anda menggunakan https://github.com/liip/drifter untuk proyek Anda, Anda hanya perlu tiga langkah
Aktifkan Peran rmt
Menjalankan kembali vagrant provision
Init rmt untuk proyek Anda php /home/vagrant/.config/composer/vendor/liip/rmt/RMT
rmt
Menggunakan RMT sangat mudah, cukup jalankan perintah:
./RMT release
RMT kemudian akan menjalankan tugas -tugas berikut:
Jalankan cek prasyarat
Minta pengguna untuk menjawab pertanyaan potensial
Jalankan tindakan pra-rilis
Melepaskan
Menghasilkan nomor versi baru
Bertahan nomor versi baru
Jalankan tindakan pasca-rilis
Berikut adalah contoh output:
Perintah release
memberikan perilaku utama alat, tambahan beberapa perintah tambahan tersedia:
current
akan menunjukkan nomor versi saat ini Anda (versi alias)
changes
menampilkan perubahan yang akan dimasukkan dalam rilis berikutnya
config
Tampilkan konfigurasi saat ini (sudah digabungkan)
init
buat (atau reset) file konfigurasi .rmt.yml
Semua konfigurasi RMT harus dilakukan di .rmt.yml
. File dibagi dalam enam elemen root:
vcs
: Jenis VC yang Anda gunakan, dapat berupa git
, svn
atau none
Untuk git
VCS Anda dapat menggunakan dua opsi berikut sign-tag
dan sign-commit
jika Anda ingin GPG menandatangani rilis Anda
prerequisites
: Daftar []
prasyarat yang harus dicocokkan sebelum memulai proses pelepasan
pre-release-actions
: Daftar []
tindakan yang akan dieksekusi sebelum proses rilis
version-generator
: Generator yang akan digunakan untuk membuat versi baru (wajib)
version-persister
: Kelentik untuk digunakan untuk menyimpan versi (wajib)
post-release-actions
: daftar []
tindakan yang akan dieksekusi setelah rilis
Semua entri konfigurasi ini berfungsi sama. Anda harus menentukan kelas yang ingin Anda tangani. Contoh:
version-generator: "simple"` version-persister: vcs-tag: tag-prefix: "v_"
RMT juga mendukung konfigurasi JSON, tetapi kami sarankan menggunakan YAML.
Terkadang Anda ingin menggunakan strategi rilis yang berbeda sesuai dengan cabang VCS, misalnya Anda ingin menambahkan entri Changelog hanya di cabang master
. Untuk melakukannya, Anda harus menempatkan konfigurasi default Anda ke dalam elemen root bernama _default
, maka Anda dapat mengganti bagian konfigurasi default ini untuk master
cabang. Contoh:
_default: version-generator: "simple" version-persister: "vcs-tag" master: pre-release-actions: [changelog-update]
Anda dapat menggunakan RMT config
untuk melihat hasil gabungan antara _default dan cabang Anda saat ini.
Strategi pembuatan nomor versi build-in.
Sederhana: Generator ini melakukan kenaikan sederhana (1,2,3 ...)
Semantik: generator yang mengimplementasikan versi semantik
Kedua opsi yang dipaksakan bisa sangat berguna jika Anda memutuskan bahwa cabang yang diberikan didedikasikan untuk beta berikutnya dari versi yang diberikan. Jadi cukup paksa label ke beta dan semua rilis akan menjadi kenaikan beta.
Opsi allow-label
(boolean): Untuk memungkinkan menambahkan label pada versi (seperti -beta, -rcxx) (default: false )
type
Opsi: Untuk memaksa jenis versi
label
Opsi: Untuk memaksa label
Kelas yang bertanggung jawab atas menyimpan/mengambil nomor versi.
VCS-TAG: Simpan versi sebagai tag VCS
Opsi tag-pattern
: Izinkan untuk memberikan regex yang harus dicocokkan oleh semua tag. Ini memungkinkan misalnya untuk merilis versi 1.xx di cabang tertentu dan untuk melepaskan 2.xx di cabang terpisah
Opsi tag-prefix
: Izinkan untuk awalan semua tag VCS dengan string. Anda dapat memiliki versi numerik tetapi tag generasi seperti v_2.3.4
. Sebagai bonus, Anda dapat menggunakan placeholder tertentu: {branch-name}
yang secara otomatis akan menyuntikkan nama cabang saat ini di tag. Jadi gunakan, generasi sederhana, dan tag-prefix: "{branch-name}_"
dan itu akan menghasilkan tag seperti featureXY_1
, featureXY_2
, dll ...
Changelog: Simpan versi dalam file Changelog
Opsi location
: Nama File Changelog Lokasi (Default: Changelog )
Tindakan prasyarat dieksekusi sebelum bagian interaktif.
working-copy-check
: Periksa apakah Anda tidak memiliki perubahan lokal VCS
Opsi allow-ignore
: Izinkan pengguna untuk melewatkan cek saat melakukan rilis dengan --ignore-check
display-last-changes
: Tampilkan Perubahan Terakhir Anda
tests-check
: Jalankan Project Test Suite
command
Opsi: Perintah untuk menjalankan (default: phpunit )
Opsi timeout
: Jumlah detik setelah itu perintah keluar (default: 60.0 )
Opsi expected_exit_code
: Kode pengembalian yang diharapkan (default: 0 )
composer-json-check
: jalankan validasi di composer.json
Opsi composer
: Cara menjalankan komposer (default: php composer.phar )
composer-stability-check
: Akan memeriksa apakah composer.json diatur ke stabilitas minimum yang tepat
stability
Opsi: Stabilitas yang harus diatur di bidang stabilitas minimum (default: stabil )
composer-security-check
: Jalankan composer.lock melawan https://github.com/fabpot/local-php-security-checker untuk memeriksa kerentanan yang diketahui dalam dependensi.
Biner Pemerek-Kekaman Lokal-PHP harus dipasang secara global.
composer-dependency-stability-check
: Tes jika hanya dependensi yang diizinkan menggunakan versi pengembangan
Opsi ignore-require
dan ignore-require-dev
: Jangan Periksa Ketergantungan Di Bagian require
atau require-dev
Opsi whitelist
: Izinkan dependensi spesifik untuk menggunakan versi pengembangan
command
: Jalankan Perintah Sistem
Opsi cmd
Perintah untuk mengeksekusi
Opsi live_output
boolean, apakah kita menampilkan output perintah? (default: true )
Opsi timeout
Integer, membatasi waktu untuk perintah. (Default: 600 )
Opsi stop_on_error
boolean, apakah kita memutuskan proses rilis pada kesalahan? (default: true )
Tindakan dapat digunakan untuk bagian pra atau pasca rilis.
changelog-update
: Perbarui file Changelog. Tindakan ini lebih lanjut dikonfigurasi untuk menggunakan formatter tertentu.
format
Opsi: Sederhana , Semantik , Markdown atau Addtop (Default: Sederhana )
file
opsi: path dari .rmt.yml ke file changelog (default: changelog )
Opsi dump-commits
: Tulis semua pesan komit sejak rilis terakhir ke file Changelog (default: false )
Opsi insert-at
: Hanya untuk Formatter Addtop: Jumlah baris untuk dilewati dari bagian atas file Changelog sebelum menambahkan nomor rilis (default: 0 )
Opsi exclude-merge-commits
: Kecualikan Gabungan Gabungan dari Changelog (Default: False )
vcs-commit
: Komit semua file dari salinan yang berfungsi (hanya gunakan dengan prasyarat working-copy-check
)
Opsi commit-message
: Tentukan pesan komit khusus. % Versi% akan digantikan oleh string versi saat ini / berikutnya.
vcs-tag
: Tandai komit terakhir
vcs-publish
: Publikasikan perubahan (komit dan tag)
composer-update
: Perbarui nomor versi dalam file komposer (perhatikan bahwa saat menggunakan packagist.org, disarankan untuk tidak memiliki tag di composer.json karena versi ditangani oleh tag kontrol versi)
files-update
: Perbarui versi dalam satu atau beberapa file. Agar setiap file dapat diperbarui, berikan array dengan
file
Opsi: Path ke file untuk memperbarui
pattern
Opsi: Opsional, gunakan untuk menentukan pola penggantian string di file Anda. Misalnya: const VERSION = '%version%';
build-phar-package
: Membangun paket phar dari proyek saat ini yang nama file tergantung pada opsi 'paket-nama' dan versi yang digunakan: [paket-nama]-[versi] .phar
Opsi package-name
: Nama Paket Generate
destination
Opsi: Direktori tujuan untuk membangun paket menjadi. Jika diawali dengan slash, dianggap absolut, jika tidak relatif terhadap akar proyek.
Opsi excluded-paths
: Regex dari jalur yang dikecualikan, langsung diteruskan ke Phar :: Metode BuildFromDirectory. Ex: /^(?!.*cookbooks|.*.vagrant|.*.idea).*$/im
/im
Opsi metadata
: Sejumlah metadata yang menggambarkan paket tersebut. Ex Author, Proyek. Catatan: Versi rilis ditambahkan secara default tetapi dapat ditimpa di sini.
Opsi default-stub-cli
: Stub default untuk penggunaan paket CLI.
Opsi default-stub-web
: Stub default untuk penggunaan aplikasi Web dari paket.
command
: Jalankan Perintah Sistem
Opsi cmd
Perintah untuk mengeksekusi
Opsi live_output
boolean, apakah kita menampilkan output perintah? (default: true )
Opsi timeout
Integer, membatasi waktu untuk perintah. (Default: 600 )
Opsi stop_on_error
boolean, apakah kita memutuskan proses rilis pada kesalahan? (default: true )
update-version-class
: Perbarui konstanta versi dalam file kelas. Usang, gunakan files-update
sebagai gantinya
class
Opsi: Jalur ke kelas yang akan diperbarui, atau nama kelas yang memenuhi syarat dari kelas yang berisi Versi Konstanta
pattern
Opsi: Opsional, gunakan untuk menentukan pola penggantian string di kelas versi Anda. % Versi% akan digantikan oleh string versi saat ini / berikutnya. Misalnya Anda dapat menggunakan const VERSION = '%version%';
. Jika Anda tidak menentukan opsi ini, setiap kemunculan string versi dalam file akan diganti.
RMT memberikan beberapa tindakan, generator, dan persisten yang ada. Jika diperlukan, Anda dapat menambahkan sendiri dengan membuat skrip PHP di proyek Anda, dan merujuknya dalam konfigurasi melalui jalur relatif:
version-generator: "bin/myOwnGenerator.php"
Contoh dengan parameter yang disuntikkan:
version-persister: name: "bin/myOwnGenerator.php" parameter1: value1
Sebagai contoh, Anda dapat melihat skrip /bin/updateApplicationVersionCurrentVersion.php dikonfigurasi di sini.
PERINGATAN: Karena name
kunci digunakan untuk menentukan nama objek, Anda tidak dapat memiliki name
yang bernama parameter.
Sebagian besar waktu, akan lebih mudah bagi Anda untuk mengambil contoh di bawah ini dan menyesuaikannya dengan kebutuhan Anda.
version-generator: semantic version-persister: changelog
vcs: git version-generator: simple version-persister: vcs-tag prerequisites: [working-copy-check, display-last-changes]
vcs: git version-generator: simple version-persister: vcs-tag prerequisites: - composer-json-check - composer-stability-check: stability: beta - composer-dependency-stability-check: whitelist: - [symfony/console] - [phpunit/phpunit, require-dev]
vcs: name: git sign-tag: true sign-commit: true version-generator: simple version-persister: vcs-tag prerequisites: [working-copy-check, display-last-changes]
vcs: git version-generator: semantic version-persister: name: vcs-tag tag-prefix : "v_" pre-release-actions: files-update: - [config.yml] - [app.ini, 'dynamic-version: %version%'] post-release-actions: [vcs-publish]
_default: vcs: git prerequisites: [working-copy-check] version-generator: simple version-persister: name: vcs-tag tag-prefix: "{branch-name}_" post-release-actions: [vcs-publish] # This entry allow to override some parameters for the master branch master: prerequisites: [working-copy-check, display-last-changes] pre-release-actions: changelog-update: format: markdown file: CHANGELOG.md dump-commits: true update-version-class: class: DoctrineODMPHPCRVersion pattern: const VERSION = '%version%'; vcs-commit: ~ version-generator: semantic version-persister: vcs-tag
Jika Anda ingin membantu, dengan mengirimkan salah satu skrip tindakan, generator, atau persisten Anda. Atau hanya dengan melaporkan bug, buka halaman proyek https://github.com/liip/rmt.
Jika Anda memberikan PR, cobalah untuk mengaitkannya beberapa unit atau tes fungsional. Lihat bagian berikutnya
Untuk dapat menjalankan tes secara lokal, Anda perlu:
Phpunit
git
lincah
Anda dapat menginstal semuanya dengan minuman:
> brew install phpunit git hg
Tes juga menguji penciptaan RMT Phar. Jadi, Anda harus mengizinkan ini di php.ini Anda, dengan membuka ikatan baris ini:
phar.readonly = Off
Akhirnya, untuk menjalankan tes, cukup luncurkan PhPunit
> phpunit
Tes fungsional adalah pengaturan RMT sementara yang berfungsi penuh. Setiap kali Anda menjalankan tes fungsional, itu membuat folder sementara dengan proyek RMT. Kemudian test suite menjalankan perintah RMT di atasnya, dan periksa hasilnya. Itulah mengapa Anda perlu memasang git dan lincah.
Untuk men -debug tes fungsional RMT, yang terbaik adalah masuk ke folder sementara ini dan menjelajahi proyek secara manual. Untuk melakukannya, cukup tambahkan $this->manualDebug();
ke dalam test suite. Ini akan merusak tes dengan output berikut:
MANUAL DEBUG Go to: > cd /private/var/folders/hl/gnj5dcj55gbc93pcgrjxbb0w0000gn/T/ceN2Mf
Maka Anda hanya perlu masuk ke folder yang disebutkan dan mulai debugging
Jonathan Macheret, Liip SA
David Jeanmonod Liip SA
dan kontributor lainnya
RMT dilisensikan di bawah lisensi MIT. Lihat file lisensi untuk detailnya.