{"id":922,"date":"2025-10-26T17:50:11","date_gmt":"2025-10-26T14:20:11","guid":{"rendered":"https:\/\/rayka-co.ir\/new\/?post_type=lesson&#038;p=922"},"modified":"2025-11-09T11:56:43","modified_gmt":"2025-11-09T08:26:43","slug":"17-%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-workflow-%d8%af%d8%b1-forgejo-%d9%be%d8%a7%db%8c%d9%87%db%8c-ci-cd-%d8%a8%d8%b1%d8%a7%db%8c-%d9%85%d9%87%d9%86%d8%af%d8%b3%db%8c-%d8%b4","status":"publish","type":"lesson","link":"https:\/\/rayka-co.ir\/new\/\u062f\u0631\u0633\/17-%d8%a2%d8%b4%d9%86%d8%a7%db%8c%db%8c-%d8%a8%d8%a7-workflow-%d8%af%d8%b1-forgejo-%d9%be%d8%a7%db%8c%d9%87%db%8c-ci-cd-%d8%a8%d8%b1%d8%a7%db%8c-%d9%85%d9%87%d9%86%d8%af%d8%b3%db%8c-%d8%b4\/","title":{"rendered":"\u06f1\u06f7. \u0622\u0634\u0646\u0627\u06cc\u06cc \u0628\u0627 Workflow \u062f\u0631 Forgejo (\u067e\u0627\u06cc\u0647\u200c\u06cc CI\/CD \u0628\u0631\u0627\u06cc \u0645\u0647\u0646\u062f\u0633\u06cc \u0634\u0628\u06a9\u0647)"},"content":{"rendered":"\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0628\u0627 \u0645\u0641\u0647\u0648\u0645 <strong>Workflow<\/strong> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0647\u0633\u062a\u0647\u200c\u06cc \u0627\u0635\u0644\u06cc \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc <strong>CI\/CD<\/strong> \u0622\u0634\u0646\u0627 \u0645\u06cc\u200c\u0634\u0648\u06cc\u062f. \u06cc\u0627\u062f \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u062f \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0627 \u062a\u0639\u0631\u06cc\u0641 Workflow\u0647\u0627\u060c \u0627\u062c\u0631\u0627\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a\u200c\u0647\u0627\u06cc \u0634\u0628\u06a9\u0647 \u0631\u0627 \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc \u0648 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0631\u062f \u0648 \u062f\u0631 \u0639\u06cc\u0646 \u062d\u0627\u0644 \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc Git \u0645\u0627\u0646\u0646\u062f <strong>version control<\/strong> \u0628\u0647\u0631\u0647 \u0628\u0631\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u0628\u0627 \u06cc\u06a9 \u0646\u0645\u0648\u0646\u0647\u200c\u06cc \u0639\u0645\u0644\u06cc\u060c \u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc Workflow\u060c \u0645\u0631\u0627\u062d\u0644 \u0627\u062c\u0631\u0627\u06cc \u0622\u0646 (\u0627\u0632 Trigger \u062a\u0627 Artifact) \u0648 \u062a\u0641\u0627\u0648\u062a \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0647\u0646\u062f\u0633\u06cc\u0646 \u0634\u0628\u06a9\u0647 \u0628\u0627 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631 \u062f\u0631 \u0637\u0631\u0627\u062d\u06cc Workflow \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n\n\n\n<p>Workflow \u0641\u0631\u0622\u06cc\u0646\u062f\u06cc \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631 \u0627\u0633\u0627\u0633 \u0631\u062e\u062f\u0627\u062f\u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f <em>push\u060c pull request\u060c \u0632\u0645\u0627\u0646\u200c\u0628\u0646\u062f\u06cc (schedule)<\/em> \u06cc\u0627 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u06cc \u0622\u063a\u0627\u0632 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0627\u0632 \u0637\u0631\u06cc\u0642 <strong>Runner<\/strong>\u0647\u0627 (\u0645\u0627\u0634\u06cc\u0646 \u06cc\u0627 \u06a9\u0627\u0646\u062a\u06cc\u0646\u0631) \u0627\u062c\u0631\u0627 \u0645\u06cc\u200c\u06af\u0631\u062f\u062f. \u0647\u0631 Workflow \u062f\u0631 \u0642\u0627\u0644\u0628 \u06cc\u06a9 \u0641\u0627\u06cc\u0644 <strong>YAML<\/strong> \u062f\u0631 \u0645\u0633\u06cc\u0631 <code>.forgejo\/workflows\/<\/code> \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u0634\u0648\u062f \u0648 \u0634\u0627\u0645\u0644 \u0627\u062c\u0632\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f <strong>Trigger\u060c Runner\u060c Jobs\u060c Steps \u0648 Artifacts<\/strong> \u0627\u0633\u062a. \u062f\u0631 \u0627\u06cc\u0646 \u0628\u062e\u0634 \u06cc\u0627\u062f \u0645\u06cc\u200c\u06af\u06cc\u0631\u06cc\u062f \u0686\u06af\u0648\u0646\u0647 \u0633\u0627\u062e\u062a\u0627\u0631 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627 \u0631\u0627 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u062f (<code>name<\/code>, <code>on<\/code>, <code>jobs<\/code>, <code>runs-on<\/code>, <code>steps<\/code>, <code>uses<\/code>, <code>run<\/code>) \u0648 \u0686\u0631\u0627 \u0627\u06a9\u0634\u0646\u06cc \u0645\u0627\u0646\u0646\u062f <code>actions\/checkout<\/code> \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc \u0645\u062e\u0632\u0646 \u0636\u0631\u0648\u0631\u06cc \u0627\u0633\u062a.<br>\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u0633\u0627\u062f\u0647 \u0639\u0645\u0644\u06cc\u060c \u06cc\u06a9 Workflow \u0627\u0628\u062a\u062f\u0627\u06cc\u06cc \u0645\u06cc\u200c\u0633\u0627\u0632\u06cc\u0645 \u06a9\u0647 \u0647\u0646\u06af\u0627\u0645 \u0647\u0631 Push \u0627\u062c\u0631\u0627 \u0634\u062f\u0647 \u0648 \u067e\u06cc\u0627\u0645\u06cc \u062f\u0631 \u062e\u0631\u0648\u062c\u06cc \u0686\u0627\u067e \u0645\u06cc\u200c\u06a9\u0646\u062f. \u062f\u0631 \u067e\u0627\u06cc\u0627\u0646\u060c \u0686\u0631\u062e\u0647\u200c\u06cc \u0627\u062c\u0631\u0627\u06cc Workflow \u0631\u0627 \u0627\u0632 \u0622\u063a\u0627\u0632 \u062a\u0627 \u062a\u0648\u0644\u06cc\u062f \u062e\u0631\u0648\u062c\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0631\u062f\u0647 \u0648 \u062a\u0641\u0627\u0648\u062a \u06a9\u0627\u0631\u0628\u0631\u062f \u0622\u0646 \u062f\u0631 <strong>\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u0634\u0628\u06a9\u0647<\/strong> (\u0645\u0627\u0646\u0646\u062f Backup\u060c Compliance \u0648 Health Check) \u0628\u0627 <strong>\u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631<\/strong> (Build\u060c Test\u060c Deploy) \u0631\u0627 \u062a\u062d\u0644\u06cc\u0644 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n\n\n\n<p>\u0645\u0648\u0627\u0631\u062f\u06cc \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0631\u0633 \u0628\u062d\u062b \u0648 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u0645\u06cc\u200c\u0634\u0648\u0646\u062f \u0639\u0628\u0627\u0631\u062a\u0646\u062f \u0627\u0632<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u0645\u0641\u0647\u0648\u0645 <strong>Workflow<\/strong> \u0648 \u0646\u0642\u0634 \u0622\u0646 \u062f\u0631 \u0633\u06cc\u0633\u062a\u0645\u200c\u0647\u0627\u06cc <strong>CI\/CD<\/strong><\/li>\n\n\n\n<li>\u0633\u0627\u062e\u062a\u0627\u0631 \u0641\u0627\u06cc\u0644\u200c\u0647\u0627\u06cc <strong>YAML<\/strong> \u062f\u0631 \u0645\u0633\u06cc\u0631 <code>.forgejo\/workflows\/<\/code><\/li>\n\n\n\n<li>\u0627\u062c\u0632\u0627\u06cc \u0627\u0635\u0644\u06cc Workflow: <strong>Trigger \u2192 Runner \u2192 Jobs \u2192 Steps \u2192 Artifacts<\/strong><\/li>\n\n\n\n<li>\u0645\u0639\u0631\u0641\u06cc \u0648 \u0645\u0642\u0627\u06cc\u0633\u0647\u200c\u06cc <strong>\u0627\u0646\u0648\u0627\u0639 Trigger\u0647\u0627<\/strong> (<code>push<\/code>, <code>pull_request<\/code>, <code>schedule<\/code>, <code>workflow_dispatch<\/code>)<\/li>\n\n\n\n<li>\u0646\u062d\u0648\u0647\u200c\u06cc \u0627\u0646\u062a\u062e\u0627\u0628 <strong>Runner<\/strong> \u0648 \u0645\u062d\u0644 \u0627\u062c\u0631\u0627\u06cc Workflow<\/li>\n\n\n\n<li>\u0645\u0641\u0647\u0648\u0645 <strong>Job<\/strong> \u0648 <strong>Step<\/strong> \u0648 \u062a\u0641\u0627\u0648\u062a \u0628\u06cc\u0646 <code>run<\/code> \u0648 <code>uses<\/code><\/li>\n\n\n\n<li>\u0645\u0639\u0631\u0641\u06cc \u0627\u06a9\u0634\u0646 \u067e\u0627\u06cc\u0647\u200c\u0627\u06cc <strong><code>actions\/checkout<\/code><\/strong> \u0648 \u0646\u0642\u0634 \u0622\u0646 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u062d\u062a\u0648\u0627\u06cc Repository<\/li>\n\n\n\n<li>\u0633\u0627\u062e\u062a \u0648 \u0627\u062c\u0631\u0627\u06cc \u06cc\u06a9 Workflow \u0633\u0627\u062f\u0647 \u0628\u0627 \u067e\u06cc\u0627\u0645 &#8220;Hello from Forgejo&#8221;<\/li>\n\n\n\n<li>\u062a\u0641\u0627\u0648\u062a Workflow \u062f\u0631 <strong>\u062a\u0648\u0633\u0639\u0647 \u0646\u0631\u0645\u200c\u0627\u0641\u0632\u0627\u0631<\/strong> \u0648 <strong>\u0627\u062a\u0648\u0645\u0627\u0633\u06cc\u0648\u0646 \u0634\u0628\u06a9\u0647<\/strong><\/li>\n<\/ul>\n\n\n<div class=\"sensei-block-wrapper\">\n<div class=\"wp-block-sensei-lms-lesson-actions\"><div class=\"sensei-buttons-container\">\n\n\n\n\n\n\n\n<\/div><\/div>\n<\/div>\n\n\n<style>.h_iframe-aparat_embed_frame{position:relative;}.h_iframe-aparat_embed_frame .ratio{display:block;width:100%;height:auto;}.h_iframe-aparat_embed_frame iframe{position:absolute;top:0;left:0;width:100%;height:100%;}<\/style><div class=\"h_iframe-aparat_embed_frame\"><span style=\"display: block;padding-top: 57%\"><\/span><iframe src=\"https:\/\/www.aparat.com\/video\/video\/embed\/videohash\/tbh042z\/vt\/frame\"  allowFullScreen=\"true\" webkitallowfullscreen=\"true\" mozallowfullscreen=\"true\"><\/iframe><\/div>\n","protected":false},"excerpt":{"rendered":"","protected":false},"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"_initial_content":"","_new_post":false,"_quiz_has_questions":false,"_lesson_complexity":"easy","_lesson_length":10,"_lesson_course":338,"_lesson_preview":"preview"},"lesson-tag":[],"class_list":["post-922","lesson","type-lesson","status-publish","hentry","module-ci-cd-with-forgejo","post"],"_links":{"self":[{"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/lessons\/922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/lessons"}],"about":[{"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/types\/lesson"}],"replies":[{"embeddable":true,"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/comments?post=922"}],"version-history":[{"count":5,"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/lessons\/922\/revisions"}],"predecessor-version":[{"id":974,"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/lessons\/922\/revisions\/974"}],"wp:attachment":[{"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/media?parent=922"}],"wp:term":[{"taxonomy":"lesson-tag","embeddable":true,"href":"https:\/\/rayka-co.ir\/new\/wp-json\/wp\/v2\/lesson-tag?post=922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}